郁圣衛(wèi),盧 奇,陳文亮
(蘇州大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,江蘇 蘇州 215006)
細粒度意見挖掘的主要目標是從觀點文本(如用戶評論文本等)中獲取情感要素(如觀點持有者、觀點對象、觀點表達等)并根據(jù)這些信息判斷觀點在文本中表達的情感傾向[1]。舉個例子,在觀點文本“我覺得質(zhì)量不錯”中,觀點持有者“我”針對觀點對象“質(zhì)量”使用觀點表達“不錯”來表達“正面”情感傾向。細粒度意見挖掘的結(jié)果通??蓱?yīng)用于觀點摘要和觀點檢索[2]。
細粒度意見挖掘獲取的情感要素根據(jù)具體任務(wù)需求和具體領(lǐng)域而定。以電商評論文本為例,其觀點持有者大多為第一人稱,并且觀點對象以及觀點表達都是出現(xiàn)在文本中的連續(xù)序列片段。因此,對于這類文本通常只獲取觀點對象及觀點表達,并將其看作序列標注問題。但是,觀點表達和觀點對象在同一語句中未必是一對一的關(guān)系,同一語句中的情感傾向也未必是單一的。例如“產(chǎn)品實惠但不耐用”,觀點對象“產(chǎn)品”對應(yīng)多個觀點表達和多種情感傾向。如果單純使用序列標注模型,很難準確判斷情感傾向的所屬。
為了解決上述問題,我們采用如圖1所示的任務(wù)框架。對于觀點文本,我們首先使用序列標注模型識別其中的情感要素序列,然后采用匹配算法將其整合為結(jié)構(gòu)化的情感要素組合。在序列標注部分,序列標簽采用IOB2標簽體系[3],其中TGT代表觀點對象,XPR代表觀點表達,對XPR使用追加標簽P、M、N分別表示正面、中性、負面傾向的觀點表達。針對序列標注的結(jié)果,我們以三元組<觀點對象,觀點表達,情感傾向>來生成情感要素組合。其中,情感傾向部分使用數(shù)值1,0,-1分別表示正面、中性、負面傾向。
圖1 本文采用的細粒度意見挖掘任務(wù)框架
目前,較為常用的序列標注模型有條件隨機場(CRF)[4]和雙向長短期記憶—條件隨機場(BiLSTM-CRF)[5]。其中,CRF屬于傳統(tǒng)機器學(xué)習(xí)方法,BiLSTM-CRF屬于深度學(xué)習(xí)與傳統(tǒng)機器學(xué)習(xí)方法的結(jié)合。Nakayama和Fujii[6]基于CRF,通過構(gòu)建豐富的特征模板,在日語細粒度意見挖掘上取得了一定效果,但是,需要人工構(gòu)建復(fù)雜的特征模板。Liu等[7]使用預(yù)訓(xùn)練詞向量,并在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的隱層輸出結(jié)果中加入了語言特征表示,如詞性和詞塊,在英語細粒度意見挖掘上取得了很好的效果。然而,這些特征表示僅僅用到文本中的字、詞及其語言信息,但缺乏豐富的情感信息。因此,如何使用外部情感詞典資源來改進細粒度意見挖掘的性能是值得研究的課題。
針對現(xiàn)有方法的不足,我們在使用序列標注模型進行細粒度意見挖掘的基礎(chǔ)上,提出一種基于領(lǐng)域情感詞典特征表示的方法: 首先基于標注數(shù)據(jù)構(gòu)建了一份新的電商領(lǐng)域情感詞典,然后在電商評論文本真實數(shù)據(jù)上,分別為CRF和BiLSTM-CRF這兩種常用序列標注模型設(shè)計基于領(lǐng)域情感詞典的特征表示。實驗結(jié)果表明,這種基于領(lǐng)域情感詞典特征表示的方法在兩種模型上都取得了良好的效果,并且超過其他情感詞典。
本文的其余部分結(jié)構(gòu)安排如下: 第1節(jié)對相關(guān)工作進行介紹;第2節(jié)介紹情感詞典資源;第3節(jié)詳細介紹我們提出的方法;第4節(jié)介紹實驗和結(jié)果分析;第5節(jié)是結(jié)論介紹。
細粒度意見挖掘?qū)儆谇楦蟹治雠c意見挖掘任務(wù)。在情感分析與意見挖掘相關(guān)任務(wù)被提出的早期,有關(guān)細粒度意見挖掘的研究工作很少。起初,較為常見的相關(guān)任務(wù)是對文檔級別文本進行情感傾向分類,如Pang等[8]使用傳統(tǒng)機器學(xué)習(xí)方法進行情感分類。隨著相關(guān)任務(wù)的拓展研究,研究人員需要在標注粒度更為細致的情感分析語料上開展研究。Wilson等[9]構(gòu)建了短語級別的情感分析標注語料,綜合考慮若干短語反映的情感傾向并對文檔實例進行情感分類。隨著進一步的研究,僅進行情感傾向分類難以滿足檢索任務(wù)的需求,因而研究人員進行擴展,提出情感要素抽取任務(wù)。情感要素可以包括觀點持有者[10]、觀點對象[11]、觀點表達[12]、情感傾向和強度[13]等。情感要素抽取任務(wù)由于獲取的是情感文本中具有實際意義的細粒度要素,因此可看作細粒度意見挖掘。早期階段,細粒度意見挖掘的相關(guān)工作大多采用CRF模型進行序列標注[14-15]。然而,基于CRF模型的序列標注模型通常需要人工構(gòu)建復(fù)雜的特征模板。近三年來,隨著深度學(xué)習(xí)的發(fā)展,更多的研究人員采用深度學(xué)習(xí)的序列標注方法進行建模,如Irsoy等[16]基于RNN模型,Katiyar等[17]用到LSTM模型。目前,深度學(xué)習(xí)方法與傳統(tǒng)機器學(xué)習(xí)方法的結(jié)合模型,如BiLSTM-CRF模型、BiLSTM-CNN-CRF模型等在序列標注任務(wù)上取得了很好的效果[18]。然而,目前基于深度學(xué)習(xí)的細粒度意見挖掘工作鮮有利用情感詞典資源。
情感詞典資源的構(gòu)建對情感分析與意見挖掘相關(guān)任務(wù)的研究也格外重要。Kaji等[19]從大規(guī)模HTML文本中構(gòu)建用于情感分析任務(wù)的詞典資源,Jijkoun等[20]使用Bootstrapping方法構(gòu)建話題特定的情感詞典。目前,常用的英文情感詞典有SentiWordNet、LIWC、ANEW等;常用的中文情感詞典有知網(wǎng)的“情感分析用詞語集”(下文簡記為 “知網(wǎng)情感詞典”)、大連理工大學(xué)信息檢索實驗室的“情感詞匯本體”[21](下文簡記為“大連理工情感詞典”)等。這些詞典對情感分析與意見挖掘任務(wù)提供了一定幫助。然而,它們的詞條較為通用,將其應(yīng)用于領(lǐng)域特定的觀點文本中時效果不佳。
基于上述相關(guān)工作和不足,本文在使用序列標注模型進行細粒度意見挖掘的基礎(chǔ)上,結(jié)合情感詞典資源,提出一種基于領(lǐng)域情感詞典特征表示的方法。
本文主要針對電商領(lǐng)域觀點文本進行細粒度意見挖掘。依照本文提出的方法,需要面向電商領(lǐng)域的領(lǐng)域情感詞典。對于電商領(lǐng)域的觀點文本,其特殊之處主要有以下幾點:
? 短文本居多,行文或正規(guī)或隨意。
? 觀點持有者大多為第一人稱。
? 通常針對電商產(chǎn)品或產(chǎn)品相關(guān)屬性,送貨服務(wù)或售后服務(wù)等觀點對象進行觀點評價。
? 包含電商領(lǐng)域特有的觀點對象詞條及觀點表達詞條。
這些特性決定了電商領(lǐng)域觀點文本中情感要素的構(gòu)成和分布。對于電商領(lǐng)域觀點文本,我們主要針對觀點表達和情感傾向的對應(yīng)關(guān)系構(gòu)建相應(yīng)的情感詞典。觀點表達可以只反映單一的情感傾向,例如“好吃”只反映正面傾向;也可以反映多種情感傾向,例如“高”在“價格高”中反映負面傾向而在“性價比高”中反映正面傾向。因此,我們將觀點表達按照反映出的情感傾向的不同定義為下列四個類別:
? 正面觀點表達
? 中性觀點表達
? 負面觀點表達
? 多極性觀點表達
其中,前三種類別的觀點表達只反映單一的情感傾向,第四種類別反映多種情感傾向。
除上述觀點表達詞條以外,在構(gòu)建情感詞典時還加入了與觀點表達具有密切關(guān)聯(lián)的詞條。
? 否定詞
否定詞的功能是讓觀點表達的情感傾向發(fā)生反轉(zhuǎn),其加入可使情感詞典中未出現(xiàn)的帶有否定前綴的觀點表達的情感信息也能夠被檢索出來。否定詞的追加間接地擴充了情感詞典的情感信息。
電商領(lǐng)域情感詞典的構(gòu)建要點在于獲取電商評論文本中觀點表達和情感傾向的對應(yīng)關(guān)系。由于領(lǐng)域資源受限,本文直接對實驗部分用到的訓(xùn)練數(shù)據(jù)中的情感要素組合進行抽取,從而構(gòu)建得到電商領(lǐng)域情感詞典。首先,從情感要素組合中抽取得到觀點表達和情感傾向的對應(yīng)關(guān)系并進行匯總,得到候選領(lǐng)域情感詞條。對于候選結(jié)果,我們進行人工檢驗并糾正了一些錯誤。最終,將校正后的觀點表達詞表作為電商領(lǐng)域情感詞典。表1給出了電商領(lǐng)域情感詞典中各個類別的詞條示例。
表1 電商領(lǐng)域情感詞典詞條示例
我們選取了兩種情感詞典,分別是知網(wǎng)情感詞典和大連理工情感詞典,和本文構(gòu)建的電商領(lǐng)域情感詞典進行比較。
為了便于比較,我們將兩種情感詞典的條目和電商領(lǐng)域情感詞典進行了統(tǒng)一。對于知網(wǎng)情感詞典,由于其僅將觀點表達分為正面傾向和負面傾向,因此我們將其等價為正面觀點表達和負面觀點表達,同時將其他三類置空。對于大連理工情感詞典,其將觀點表達分為正面、中性、負面以及正負都有可能這四類,因此我們將其對應(yīng)等價到定義中的四類,并將其否定詞類別置空。
我們分別從基于情感詞典的條目統(tǒng)計信息和條目中具體詞條這兩個方面對三種情感詞典進行比較。表2給出了三種情感詞典的觀點表達類別及相關(guān)統(tǒng)計信息。
表2 三種情感詞典的觀點表達類別及相關(guān)統(tǒng)計信息
條目統(tǒng)計信息僅僅是衡量情感詞典的一個方面。表3給出了三種情感詞典共有詞條和電商領(lǐng)域情感詞典獨有詞條的比較結(jié)果。
表3 情感詞典詞條異同性比較
從表中可以看出:
? 電商領(lǐng)域情感詞典在各個類別都擁有大量和電商領(lǐng)域高度相關(guān)的獨有詞條。
? 兩種通用詞典中和電商領(lǐng)域高度相關(guān)的詞條數(shù)量較少。
針對上述三種情感詞典,我們?yōu)槠涠x情感詞典標簽。表4給出了不同情感詞典的情感詞典標簽。
表4 不同情感詞典的情感詞典標簽
我們提出的細粒度意見挖掘方法以電商評論文本為研究對象。針對電商評論文本,我們使用第3節(jié)構(gòu)建的電商領(lǐng)域情感詞典來生成數(shù)據(jù)表示。
對于數(shù)據(jù)表示的生成,我們采用如下方式: 首先使用領(lǐng)域情感詞典對電商評論生文本進行最大正向匹配以得到具體觀點表達在生文本中的位置,然后采用IOB2標簽體系生成情感詞典標簽。最終將得到的情感詞典標簽和生文本進行結(jié)合,構(gòu)成基于情感詞典的數(shù)據(jù)表示。給出基于領(lǐng)域情感詞典的數(shù)據(jù)表示實例如表5所示。在表5的例子中,觀點表達“實惠”與“不耐用”都出現(xiàn)在領(lǐng)域情感詞典中。其中,DoUP代表領(lǐng)域情感詞典的正面觀點表達標簽,DoN代表否定詞標簽。
表5 基于領(lǐng)域情感詞典的數(shù)據(jù)表示舉例
CRF是一種判別式模型,在序列標注任務(wù)中通常采用線性鏈條件隨機場(Linear-chain CRF)。根據(jù)該模型的定義,可以將序列標注任務(wù)轉(zhuǎn)化為如下形式,給定輸入序列形如:x=x1,x2,…,xn,任務(wù)目標是預(yù)測與該輸入序列等長的標簽序列:y=y1,y2,…,yn,標簽序列中每個位置與輸入序列相對應(yīng)。然后,由式(1)計算條件概率P(y|x)。
(1)
其中,Z(x)是歸一化因子,fk和gk分別是轉(zhuǎn)移特征函數(shù)和狀態(tài)特征函數(shù),它們的輸出值都為布爾值。對于fk,當yi-1,yi,x滿足轉(zhuǎn)移特征函數(shù)的具體數(shù)值時輸出為1,否則為0;gk與其類似。λk和μk分別是對應(yīng)特征函數(shù)的權(quán)值。在訓(xùn)練過程中,由輸入序列和標簽序列構(gòu)成的每一組實例通過最大化式(1)的對數(shù)似然概率來訓(xùn)練模型中的各個變量。測試時,給定測試數(shù)據(jù)中的一組輸入序列實例x′,選取滿足式(2)的輸出序列y*作為最佳預(yù)測標簽序列。
y*=arg maxP(y′|x′)
(2)
對于CRF模型特征模板的設(shè)計,我們采用如表6所示的特征模板。
其中,n代表與當前位置的偏移量(0表示當前位置),char代表字符,dict表示情感詞典標簽取值,具體取值與3.1小節(jié)保持一致。模板F4、F5、F6生成的特征即作為情感詞典特征。以表5中的當前位置字符“惠”為例,其按照表6生成的特征如表7所示。
表6 CRF模型采用的特征模板
表7 CRF模型生成特征舉例
圖2是本實驗采用的BiLSTM-CRF框架。
圖2 BiLSTM-CRF框架
第一層是數(shù)據(jù)表示層。其作用是將我們給出的字序列和情感詞典標簽序列的輸入映射到向量級別的輸入表示。本實驗中,共有兩種輸入表示,一種是字表示,另一種是情感詞典表示,分別通過事先建立的索引關(guān)系得到。然后,將字表示和情感詞典表示進行拼接,得到最終的輸入表示。
第二層是BiLSTM層。其作用是將第一層得到的輸入表示轉(zhuǎn)化為隱層表示輸出。長短期記憶網(wǎng)絡(luò)(LSTM)是一種特殊的循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)模型,其主要結(jié)構(gòu)如式(3)所示。
(3)
第三層是CRF層。假設(shè)序列標注的標簽個數(shù)為k,對于輸入序列x=x1,x2,…,xn,經(jīng)過前三層的計算后可以得到維數(shù)為n×k的分值矩陣P,矩陣中的某一個元素Pi,j代表第i個輸入狀態(tài)標注為第j個標簽的得分。對于一組預(yù)測標簽序列y=y1,y2,…,yn,定義它的得分如式(4)所示。
(4)
其中,A是轉(zhuǎn)移得分矩陣,Ai,j代表從標簽i轉(zhuǎn)移到標簽j的得分。y0和yn分別是標簽序列中的起始和結(jié)束標簽,需要加入到原有標簽集合中。因此A是k+2階方陣。由此,我們得到基于所有可能的標簽集合Yx下的條件概率P(y|x)如式(5)所示。
(5)
在訓(xùn)練過程中,最大化如式(5)中正確標簽序列的對數(shù)似然概率。測試時,選取滿足式(6)的結(jié)果y*作為最佳預(yù)測標簽序列。
(6)
使用上述序列標注模型對實驗數(shù)據(jù)進行標注后,便可獲取其中含有的觀點對象、觀點表達以及情感傾向并進行情感要素組合匹配。不同于關(guān)系抽取任務(wù)中頭實體和尾實體都不為空的情形,<觀點對象,觀點表達,情感傾向>中的觀點對象可以為空。這樣的問題給匹配帶來了困難。因此,本實驗采用如表8所示的算法進行匹配。
表8 情感要素組合匹配算法
對于這個算法,我們給出如圖3所示的具體實例。對于語句“很差勁,質(zhì)量不好”的序列標注結(jié)果,我們首先以中間的逗號作為分隔符將其分隔為兩個短句。對于短句“很差勁”的情感要素“<差勁,XPRN>”,鎖定得到觀點表達“差勁”,但是其相鄰左側(cè)和相鄰右側(cè)都不存在觀點對象,因此返回結(jié)果“
圖3 情感要素組合匹配示例
本節(jié)先介紹實驗數(shù)據(jù),其次介紹情感詞典數(shù)據(jù),然后介紹實驗設(shè)置,再介紹實驗的評價方法,最后是實驗結(jié)果、方法對比與實例分析。
本次實驗的數(shù)據(jù)來源于BDCI2017-TASK12賽事[注]http://www.datafountain.cn/#/competitions/2681intro復(fù)賽階段的語料,所屬類型為電商評論文本,共計20 000條電商評論文本的標注實例。原始語料的標注方式如表9所示。
表9 原始語料標注方式示例
我們對原始數(shù)據(jù)進行初步預(yù)處理。首先,我們打亂原有語料順序,并以8: 1: 1的比例將語料初步切分為訓(xùn)練集、驗證集、測試集。然后,我們把初步預(yù)處理結(jié)果轉(zhuǎn)化為序列標注數(shù)據(jù)。轉(zhuǎn)化舉例如圖4所示。
圖4 實驗數(shù)據(jù)轉(zhuǎn)化示例
對每條實例中的原文本以短句標點符號為界進行切分得到若干短句,并將每一個情感要素組合和這些短句進行匹配。如果存在匹配結(jié)果,則按照情感要素組合中每個元素的位置標注于該短句上。最終得到符合序列標注規(guī)則的實驗數(shù)據(jù)。
考慮到20 000條標注實例的句長參差不齊,在實際訓(xùn)練過程中,我們將訓(xùn)練集、驗證集、測試集中的原有實例切分為短句。表10給出了它們的相關(guān)統(tǒng)計信息:
表10 實驗數(shù)據(jù)相關(guān)統(tǒng)計信息
為了進行實驗比較,我們又用到知網(wǎng)情感詞典和大連理工情感詞典。由于第3節(jié)提出的方法可以拓展到任意情感詞典上,因而在具體實驗中我們使用三種情感詞典對4.1小節(jié)得到的實驗數(shù)據(jù)追加情感詞典標簽。不同情感詞典會生成不同情感詞典標簽。表11給出了不同情感詞典對同一實例的情感詞典標簽結(jié)果。
本次實驗,我們使用兩種序列標注模型: CRF和BiLSTM-CRF。對于CRF,我們使用3.2小節(jié)設(shè)計的特征模板,迭代次數(shù)設(shè)置為滿足收斂條件為止。對于BiLSTM-CRF,我們按照如表12所示的參數(shù)進行實驗。
表11 不同情感詞典生成標簽示例
表12 BiLSTM-CRF參數(shù)設(shè)置
對于BiLSTM-CRF實驗結(jié)果的選取,我們在每次epoch訓(xùn)練結(jié)束后測得驗證集的F1值,每當?shù)玫降腇1值到達極大值時存儲模型。全部訓(xùn)練結(jié)束后,我們得到在驗證集上F1值最優(yōu)的模型。使用這個模型對測試集進行測試,得到最終的實驗結(jié)果。
本次實驗,我們分別對序列標注結(jié)果和情感要素組合匹配結(jié)果進行評價。對于這兩個階段的結(jié)果,采用準確率(Precision)、召回率(Recall)以及F1值進行評價。它們在公式結(jié)構(gòu)上相同,但在具體含義上有所不同。給出P(準確率)、R(召回率)、F(F1值)的計算方式如式(7)~式(9)所示。
對于序列標注結(jié)果評價,|A|代表預(yù)測集的情感要素序列(觀點對象和觀點表達)總數(shù),|G|代表標準集的情感要素序列總數(shù),|A∩G|代表預(yù)測集與標準集完全匹配的情感要素序列總數(shù)。而對于情感要素組合匹配結(jié)果評價,|A|代表預(yù)測集的情感要素組合結(jié)果總數(shù),|G|代表標準集的情感要素組合結(jié)果總數(shù),|A∩G|代表預(yù)測集與標準集完全匹配的情感要素組合結(jié)果總數(shù)。
本次實驗,我們共進行了兩組。每組實驗各有4套不同的細粒度意見挖掘模型。兩組實驗分別基于CRF和BiLSTM-CRF,4套模型分別為BASELINE、+HOWNET、+DUTIR、+DOMAIN。其中,BASELINE僅使用字特征表示訓(xùn)練得到、+HOWNET在使用字特征表示的基礎(chǔ)上加入知網(wǎng)情感詞典特征表示、+DUTIR加入大連理工情感詞典特征表示、+DOMAIN加入電商領(lǐng)域情感詞典特征表示。表13給出了所有結(jié)果。從實驗結(jié)果,可以看出:
表13 實驗結(jié)果
? 加入情感詞典特征表示后的各模型相較于同一實驗組的BASELINE,F(xiàn)1值都得到了提升,表明情感詞典的有效性。
? 無論是在實驗組CRF還是在實驗組BiLSTM-CRF上,基于領(lǐng)域情感詞典特征表示的模型+DOMAIN在各項性能上均優(yōu)于另外兩種加入其他情感詞典特征表示的模型,表明領(lǐng)域情感詞典可以更好地提高領(lǐng)域內(nèi)細粒度意見挖掘任務(wù)的性能。
? BiLSTM-CRF的整體性能優(yōu)于CRF,表明深度學(xué)習(xí)模型更適合本任務(wù)。
我們將本文方法得到的實驗結(jié)果與其他方法進行了對比,對比結(jié)果如表14所示。其中,Yang,et al.基于文獻[14],采用Semi-Markov CRF作為序列標注模型;Liu,et al.基于文獻[7],采用RNN作為序列標注模型。由于本文用到的實驗數(shù)據(jù)缺乏預(yù)訓(xùn)練分布式表示以及語言特征,實際測得性能要稍低于原作者提出的方法。Our對應(yīng)表13中性能最佳的模型BiLSTM-CRF+DOMAIN。通過對比可以看出,我們的模型取得了最好結(jié)果。
表14 與其他方法的對比
我們對各個模型在測試集上得到的序列標注預(yù)測結(jié)果進行分析后發(fā)現(xiàn):
? 在序列標注模型中加入情感詞典特征表示的最大作用是改善原有基準系統(tǒng)(BASELINE)對于低頻觀點表達的預(yù)測效果。
? 領(lǐng)域情感詞典相較其他情感詞典具有更高的覆蓋度。
以表15給出的兩個實例對其進行說明。由于兩組實驗取得了一致的預(yù)測結(jié)果,因此對其進行了合并。
表15 實例分析
在第一個實例中,觀點表達“可靠”在訓(xùn)練數(shù)據(jù)中的出現(xiàn)頻次僅為6次,屬于低頻觀點表達,因而兩組實驗組的BASELINE模型都難以對其進行識別。而“可靠”在知網(wǎng)情感詞典、大連理工情感詞典、電商領(lǐng)域情感詞典中都有出現(xiàn),因此加入情感詞典特征表示的各個模型都將其識別了出來。
在第二個實例中,觀點表達“5星”是電商領(lǐng)域中產(chǎn)品的評分傾向,具有一定的領(lǐng)域特性。由于該詞條僅在電商領(lǐng)域情感詞典中出現(xiàn),因而只有+DOMAIN模型將其識別了出來。
本文提出了一種基于領(lǐng)域情感詞典特征表示的細粒度意見挖掘方法。我們首先構(gòu)建一個新的電商領(lǐng)域情感詞典,然后基于該詞典在電商評論文本上構(gòu)建特征表示并將其加入序列標注模型的輸入部分。該方法在不進行復(fù)雜的特征設(shè)計,不進行過于耗時的預(yù)處理操作的前提下,充分利用情感詞典資源,豐富了序列標注模型輸入部分的特征表示。實驗結(jié)果表明,基于電商領(lǐng)域情感詞典的方法在CRF和BiLSTM-CRF這兩種序列標注模型上都取得了良好的效果,并且超過其他情感詞典。本文構(gòu)建的領(lǐng)域情感詞典已經(jīng)公布在Github[注]https://github.com/zeitiempo/ECSD上,在業(yè)界共享。