許重建,李險峰
(北京大學深圳研究生院,深圳518000)
隨著經濟的快速發(fā)展,我國已成為世界第一大出口國,外貿經濟已成為我國經濟的重要組成部分,出口貿易過程中關務業(yè)務非常專業(yè)而且復雜,其中HS Code(The Harmonization System Code,商品名稱及編碼協(xié)調制度)[1]是由國際海關理事會制定一種國際通用的進出口商品歸類體系,是對各種不同產品出入境應征/應退關稅稅率進行量化管理的制度。HS Code 編碼體系共有22 大類98 章,國際通用的HS 編碼由2 位碼、4 位碼及6 位碼組成,其中2 位碼對應“章(Chapter)”,4 位碼對應“目(Heading)”,6 位碼對應“子目(Subheading)”,6 位碼以上的編碼及對應商品由各國自己定義。目前中國使用的是10 位HS Code 編碼體系,大概有11302 個10 位的HS Code,每一個HS Code 有對應相關的商品描述,報考成分含量、用途、制備,等等,HS Code 編碼體系中多處使用了兜底設計,例如將每一個“子目”的最后一行定義為“其他”(編碼常用數(shù)字9 來表示),包含了所有在本“子目”中難以分類的商品,以保證HS Code 編碼體系的完整性和涵蓋面。正是這種“兜底式”的設計體系,導致了用算法來解決HS Code產品歸類的復雜度和技術難度陡然增加。圖1 是海關“第2 類-植物產品,第10 章-谷物”的部分商品HS Code 編碼示例。
由于貿易過程中涉及的關務、稅務、外匯、物流等業(yè)務專業(yè)性很強,所以出現(xiàn)了很多外貿綜合服務平臺專門為外貿公司提供這類專業(yè)復雜的出口貿易業(yè)務服務,讓出口企業(yè)專注于自己的主營業(yè)務。HS Code 編碼的復雜性導致其歸類、查詢和確認需要很多的人力工作量和專業(yè)的業(yè)務知識,并且很容易出錯,成為當前影響國際貿易貨物通關效率的重要因素之一。作為一個外貿綜合服務平臺,HS Code 產品歸類是國際貿易的基礎設施,如何進行無國別的商品歸類顯得非常重要,如何提高HS Code 產品歸類的準確率和泛化能力成為了亟需解決的問題。
HS Code 產品歸類本質上屬于文本分類問題,文本分類問題是自然語言處理領域中一個非常經典的問題,比較著名的自動文本分類方法主要有Bayes[2]、KNN[3]、LLSF[4]、NNet[5]、Boosting[6]、SVM[7]、最大熵模型等,卡內基梅隆大學的Yang[2-8]使用英文標準分類語料,對常用的多種分類方法進行比較客觀的比較后得出的結論是KNN 和SVM 較其他方法有更高的分類準確性和穩(wěn)定性。但是,KNN 方法會隨著文檔數(shù)的增加效率迅速下降;SVM 方法本質上是一種兩類分類器,對多類分類支持不好,而且分類器訓練時間比較長。文獻[9]的實驗表明最大熵模型方法優(yōu)于Bayes 方法,與KNN 方法和SVM 方法效率不相上下,但其穩(wěn)定性較KNN弱。近幾年深度學習無論在圖片[10]還是NLP(Natural Language Processing)[11]領域都有質的突破,因此我們嘗試使用深度學習的方法來進行HS Code 產品自動歸類。首先我們對HS Code 領域數(shù)據(jù)特征進行分析,然后設計并建立相關的數(shù)據(jù)處理模型,接著在某外綜服務平臺上進行驗證,實驗結果證明這種方法效率很高并且穩(wěn)定。為了對基于深度學習的HS Code 產品自動歸類技術和其他文本分類方法進行比較,我們同時使用最大熵模型進行HS Code 產品自動歸類預測,并比較了兩種方法的測試數(shù)據(jù),實驗結果表明基于深度學習的分類方法要優(yōu)于最大熵模型分類方法。
本節(jié)我們首先將分析HS Code 編碼使用的業(yè)務場景和領域數(shù)據(jù)特點,接著分析數(shù)據(jù)處理,然后針對這些業(yè)務場景和特點進行算法設計,算法設計包括總體框架設計和詳細設計。
在外綜服關務板塊中,商品HS Code 歸類是外貿業(yè)務中最基礎、技術性最強的工作。外綜服平臺基于海關標準對商品進行HS Code 歸類及知識產權審核,HS Code 直接關系到報關、商檢、退稅、反傾銷等多方面的要求,歸類的準確性直接影響到通關順利與否。正是HS Code 歸類在通關過程中具有確定匯率、確定監(jiān)管條件等關鍵作用,導致了HS Code 需要嚴格的準確率,這也是和其他業(yè)務場景產品歸類最大不同的地方。同時,HS Code 的領域數(shù)據(jù)有自己非常獨特的地方,HS Code 的文本標簽數(shù)據(jù)是由品名和申報要素無序拼裝在一起的,這和其他有特定上下文時序信息的文本數(shù)據(jù)在選擇算法上將會有非常大的不同。HS Code的文本標簽示例數(shù)據(jù)如圖2 所示。
圖2 HS Code文本標簽數(shù)據(jù)示例
通過分析,我們歸納HS Code 領域數(shù)據(jù)主要有以下四個特點:
(1)HS Code 的領域數(shù)據(jù)是由品名和申報要素無序拼裝起來的,文本沒有上下文時序信息。
(2)HS Code 的領域數(shù)據(jù)即使產品名稱相同,但如果材料、成分或用途不同,那么其歸屬的HS Code 也會不一樣。
(3)HS Code 的領域數(shù)據(jù)大量涉及其他,除非等語義推理歸類,如9405990000:稅則上解釋是品目9405所列物品其他材料制零件;9401790000:稅則上解釋是其他金屬框架的坐具。這類badcase 的優(yōu)化涉及到知識推理,本體邏輯推理,等等。
(4)HS Code 的領域數(shù)據(jù)同時有非常多的涉及到范圍推理或者成分推理,如8536901100:稅則上解釋是工作電壓不超過36 伏的接插件。
(1)總體設計
通過對HS Code 領域數(shù)據(jù)特點分析,我們設計了基于文本深度學習的HS Code 產品歸類模型,模型總體框架和詳細的數(shù)據(jù)處理流程分別如上圖3 和圖4 所示,用戶輸入品名和一段產品描述,HS Code 產品歸類模型將會計算預測出文本對應的top-5 HS Code。HS Code 產品歸類模型主要包括層級分類器模型和詞向量模型兩部分,其中層級分類器模型又分第一層章節(jié)分類模型和第二層10 位HS Code 分類模型,用戶輸入首先通過第一層章節(jié)分類模型處理后再輸出給第二層10位HS Code 分類模型處理,然后再輸出粗排HS Code候選集合;詞向量模型的輸入則來自某外綜服平臺的標簽數(shù)據(jù)和稅則標簽數(shù)據(jù),以及一些外部數(shù)據(jù),訓練之后再進行K-means 聚類分析,然后再結合層級分類器模型輸出的粗排HS Code 候選集進行細排語義匹配和語義推理,最后才輸出HS Code 預測結果。
圖3 HS Code產品歸類文本深度NLP總體算法框架
圖4 算法數(shù)據(jù)處理流程圖
(2)訓練語料構建
語料對算法的重要性,就像汽油對汽車的重要性是一樣的,是算法的引擎動力。HS Code 的語料既有來自監(jiān)督(已打標簽的)的某外綜服平臺歷史通關數(shù)據(jù)、稅則數(shù)據(jù),又有來自無監(jiān)督的維基百科中文數(shù)據(jù)、1688平臺商品品名、類目屬性數(shù)據(jù)。無監(jiān)督數(shù)據(jù)主要用來訓練詞向量,提高詞向量模型的泛化能力。
(3)分詞
在文本NLP 中,詞是最小的能夠獨立活動的有意義的語言成分,因此分詞是開展文本NLP 的最基礎一環(huán),在HS Code 文本NLP 中使用的是jieba 分詞[12]。jieba 分詞算法使用了基于前綴詞典實現(xiàn)高效的詞圖掃描,生成句子中漢字所有可能生成詞情況所構成的有向無環(huán)圖(Directed Acyclic Graph,DAG),再采用動態(tài)規(guī)劃查找最大概率路徑,找出基于詞頻的最大切分組合,對于未登錄詞,采用了基于漢字成詞能力的HMM模型[13-14],使用了Viterbi 算法[15]。在使用jieba 分詞時,定制了該外綜服平臺的專用品名詞典和基于jieba 上定制該外綜服平臺外貿特有的分詞庫,這樣在分詞時,可以有效地突出該外綜服平臺專用品名的切詞效果。同時,jieba 分詞算法會加載定制的品名字典、停用詞字典、申報要素字典、正則表達式字典,等等。定制后的jieba 分詞運行效果如表1 所示,其中無線燃氣探測器由于是外貿專業(yè)領域品名,會保留專業(yè)品名不被分詞,從而保證專業(yè)品名的語義完整性。
表1 jieba 分詞效果
(4)詞向量
詞向量是一種把詞處理成向量的技術[16],并且保證向量間的相對相似度和語義相似度是相關的。這個技術是在無監(jiān)督學習[17]方面最成功的應用之一。傳統(tǒng)上,自然語言處理(NLP)系統(tǒng)把詞編碼成字符串,這種方式是隨意確定的,且對于獲取詞之間可能存在的關系并沒有提供有用的信息。Word2Vec[18]詞向量本質是一種神經概率語言模型,詞的表示是向量形式、面向語義的。兩個語義相似的詞對應的向量也是相似的,具體反映在夾角cosine 或距離上。甚至一些語義相似的二元詞組中的詞語對應的向量做線性減法之后得到的向量依然是相似的。詞的向量表示可以顯著提高傳統(tǒng)自然語言處理任務的性能。Word2Vec 主要提供了CBOW[19]和Skip-Gram[20]兩種模型。在HS Code 文本NLP 場景中,詞向量訓練采用的是CBOW 模型如圖5所示。
圖5 CBOW模型
CBOW 模型采取的策略是根據(jù)上下文的詞語預測當前詞語的出現(xiàn)概率的模型。在CBOW 模型的訓練中,采用了負采樣(Negative Sampling)[21]的訓練方式,負采樣的思想是每次訓練只隨機取一小部分的負例使它們的概率最小,以及對應的正例概率最大。對負例進行抽樣需要先定義一個噪音分布(Noise Distribution),然后再依據(jù)概率分布進行帶權隨機抽樣。在Word2Vec 的CBOW 模型中,我們使用的噪音分布是基于詞的頻次的權重分布,計算公式如下:
相比于直接使用頻次作為權重,取0.75 冪的好處可以減弱不同頻次差異過大帶來的影響,使得小頻次的單詞被采樣的概率變大。有了噪音分布以后,基于CBOW 模型的負采樣訓練的損失函數(shù)如下:
負采樣(Negative Sampling)是一種概率采樣的方法,屬于NCE(Noise Contrastive Estimation)[22]的一種簡單形式,訓練得到的詞向量質量也很高,詞向量語義表達能力更強一些,因此相對常用一些。
(5)層級分類器
由于整個HS Code 編碼體系自身是按照2 位碼-章節(jié),4 位碼-目,6 位碼-子目,最后10 位HS Code 層次結構進行管理的,而且10 位的HS Code 總共大概有11302 個類別,且每個HS Code 類別的數(shù)據(jù)分布是極其不均衡的。因此直接用文本分類算法對11302 個10位HS Code 進行一步到位的預測是非常不準確的,故而采取層級分類器方案先進行粗排。第一層分類器將一段文本正確的分類到HS Code 的前2 位(HS Code 每個章節(jié)),預測top 5 個章節(jié),第二層分類器是按照每個章節(jié)來預測top 200 個10 位HS Code。整個層級分類器的分案采用的是fastText[23]分類算法進行預測,同時也探索使用了TextCNN[24-25]分類器算法,最后發(fā)現(xiàn)TextCNN 的分類器算法比fastText 在HS Code 歸類上效果要差很多。筆者詳細分析了為什么TextCNN 比fast-Text 在外貿HS Code 領域效果會這么差,最后得出的結論是領域數(shù)據(jù)導致的。TextCNN 的主要優(yōu)勢在于捕捉一段真實文本中的上下文時序語義信息,就像圖片CNN用來捕捉局部感受視野是一樣的,而HS Code 領域數(shù)據(jù)只是有品名和申報要素無序拼裝的,完全沒有上下文時序語義信息,所以TextCNN 方法得出的效果差。
fastText 的核心思想是將整篇文檔的詞及NGram[26]向量疊加平均得到文檔向量,然后使用文檔向量做Softmax 多分類。fastText 的模型架構圖6 所示,由fastText 模型架構可以看出,從hidden layer 輸出到output layer,fastText 就是一個層級的Softmax 線性多類別分類器,分類器的輸入是一個用來表征當前文檔的向量;模型的前半部分,即從輸入層輸入到隱含層輸出部分,主要是疊加構成這篇文檔的所有詞及N-Gram的詞向量,然后取平均來生成用來表征文檔的向量。在fastText 訓練時,使用的損失函數(shù)如下:
在我們使用的56238 條測試數(shù)據(jù)集上,fastText 第一層章節(jié)分類器預測top 5 個章節(jié)的準確率達到了0.962908。
圖6 fastText模型架構
fastText 第二層分類器預測每個章節(jié)的10 位HS Code,如在85,84,94,61,39 進行第二層分類器預測到top 200 的10 位HS Code 預測上,因為這幾個重點章節(jié),例如85 章節(jié)下面就有1300 多個不同的10 位HS Code,只有先通過第二層分類器預測給出top 200 的10位HS Code,后續(xù)精排算法策略才能實現(xiàn),top 200 準確率如表2 所示。
表2 第二層分類器預測實驗結果
(6)K-means 聚類質點向量
通過兩層層次分類器初步選出200 個10 位HS Code,進入到精排算法階段時,由于我們數(shù)據(jù)嚴重傾斜,(如3926909090 對應的歷史數(shù)據(jù)有54879 條,8534009000 對應的歷史數(shù)據(jù)有39458,8507600090 對應的歷史數(shù)據(jù)有39177,4202920000 對應的歷史數(shù)據(jù)有36745,9403609990 對應的數(shù)據(jù)有29441,等等),這時候精排算法階段用人工權重的方式會有些難以實現(xiàn),因為有一些數(shù)據(jù)傾斜的問題,對一些歷史數(shù)據(jù)樣本大 的 10 位 HS Code(如 上 述 的 3926909090,8534009000 等),先用K-means[27]聚類算法求出50 個聚類質點,讓這50 個聚類質點的向量來表達一個10位HS Code。通過這種方式加強HS Code 的向量表達能力和抗干擾能力。K-means 聚類質點向量的核心問題是在于聚類算法在何時收斂,我們使用了如下的代價函數(shù)作為聚類算法收斂的判斷依據(jù):
其中:
rij:表示如果第j 個數(shù)據(jù)點屬于第i 類,那就記作1,否則記作0 的一個N×C 大小的矩陣。代價函數(shù)的差分值小于一定數(shù)值的時候(N 次越不過最小值點)即可認為收斂了。
(7)文本詞向量平均池化
有了詞向量模型,文本NLP 中最小語義單位——詞,就可以用分布式向量來表達了。由于HS Code 的領域文本由品名和申報要素無序拼裝起來的,文本沒有上下文時序信息,因此這種文本組織方式適合用詞向量平均池化來表達整個文本的語義向量,就是將一段文本中的每個詞向量進行相加并求均值,這種方式綜合考慮了一段文本中每個詞的貢獻能力。除了用詞向量平均池化,在文本向量表示中我們也嘗試了詞向量最大池化,詞向量最大池化就是去一段文本中每個詞向量每個維度最大的值,這種方法相當于考慮一段文本中最顯著特征信息,忽略掉其他無關或者不重要的信息。經過測試對比,在HS Code 領域文本,詞向量平均池化的整體效果比最大池化的效果要好很多。
(8)語義匹配相似度計算
一段文本查詢經過兩層層級分類器粗排選出候選HS Code 集合,然后就會進入HS Code 文本歸類的細排算法階段,細排階段的主要核心環(huán)節(jié)就是文本語義匹配相似度的計算。文本語義匹配的主要難點:
①自然語言處理中基本處理單位是詞,而詞只是個符號表示,存在語義鴻溝的現(xiàn)象,需要將符號表示由模型轉成向量表示,這里就會有很多的誤差。
②詞語匹配的多元性,不同的詞語可能表示的是同一個語義,例如同義詞,如“荷花”、“蓮花”、“水芙蓉”、“芙蕖”,它們表示的都是同一種植物;同理一個相同的詞在不同的語境下會有不同的語義,例如“蘋果”既可以是一種水果,也可以是一家公司,亦可以是一個品牌。
③短語匹配的結構性,多個詞語可以按照一定的結構組合成短語,匹配兩個短語需要考慮短語的結構信息。例如“機器學習”和“學習機器”兩者的詞語是一樣的,而詞的順序不同,導致文本語義完全不同。
目前HS Code 文本歸類中的語義匹配相似度是基于K-means 聚類質點向量的cosine 進行計算的。未來可以考慮采用帶監(jiān)督的DSSM 語義匹配模型或者WMD(詞移距離)來進行語義相似度的匹配計算?;诰垲愘|點向量的cosine 相似度算法偽代碼:
輸入:兩個詞向量v1 和v2
輸出:cosine 相似度cosine_sime
def cosine_similarity_self(v1,v2):
dot_product=np.dot(v1,v2)
cosine_sim=dot_product/(norm(v1)*norm(v2))
return cosine_sim
(9)深度語義對抗
由于該外綜服自身出口數(shù)據(jù)有限,并且出口的產品數(shù)據(jù)極度不平衡,有部分HS Code 對應的產品在該外綜服出口數(shù)據(jù)非常少甚至還有一些從來沒有出口過,這樣數(shù)據(jù)的瓶頸將會越來越凸顯,如何解決數(shù)據(jù)樣本瓶頸的問題是一個重要的困難。由于產品是互通性的,那么如何將淘寶天貓、1688 海量商品數(shù)據(jù)隱射到外貿出口產品數(shù)據(jù)是一項非常有價值的工作。表3 是天貓商品數(shù)據(jù)和該外綜服平臺外貿出口數(shù)據(jù)的一些屬性對比和差異性。
表3 外貿屬性數(shù)據(jù)和電商商品數(shù)據(jù)對比示例
從語義上來看,天貓的商品語義和該外綜服平臺帶有歸類要素的外貿語義差異確實比較大。而用GAN(Generative Adversarial Networks)[28]來把天貓商品品名作為噪音來對抗生成語義向量隱射到該外綜服平臺的語義,難度確實不小,這主要是GAN 的內在原理確定的,GAN 只適用于連續(xù)型數(shù)據(jù)的生成,圖片是典型的連續(xù)性數(shù)據(jù),對于離散型數(shù)據(jù)效果不佳,文本數(shù)據(jù)就是最典型的一種離散型數(shù)據(jù)。這里的離散和連續(xù)主要是指數(shù)據(jù)是否持續(xù)可微分。圖像矩陣中的元素是可微分的,其數(shù)值直接反映出圖像本身的明暗、色彩等因素,很多這樣的像素點組合在一起,就形成了圖像,也就是說,從圖像像素矩陣到圖像,不需要采樣生成。而文本本身都是一個個詞向量構成,而詞向量是經過采樣訓練出來的獨立向量,天然都是離散、獨立的。而GAN本身是一種對抗神經網絡,而神經網絡的優(yōu)化方法大多數(shù)都是基于梯度的,而對于獨立訓練出來的文本離散向量對應的生成器G(Generator)的損失函數(shù)loss 會是一個近似于常數(shù)log2 的JS 散度,而固定常數(shù)log2 的導數(shù)是0,這樣這個生成器不能進行基于梯度進行反向傳播(Back Propagation,BP)[29]進行優(yōu)化。這里需要想其他的辦法來避免這個問題,目前的我們采用的方法是基于最新的Wasserstein GAN[30]進行處理,把天貓平臺的商品文本數(shù)據(jù)做為噪音并采用GAN 進行處理來和該外綜服的打標數(shù)據(jù)做語義對抗,將天貓平臺的商品數(shù)據(jù)文本隱射到該外綜服的語義向量。同時GAN這種處理方式要注意天貓出海業(yè)務數(shù)據(jù)經過生成器后出來的向量語義是不是有很大的變化,有些情況可能會迷惑判別器,但它的分類類別和它應該歸屬的類別比已經偏了,這個是兩者數(shù)據(jù)分布差異引起的,所以需要用遷移成分分析(Transfer Component Analysis,TCA)來調整數(shù)據(jù)的邊緣分布條件分布和聯(lián)合分布。
(10)稅則語義推理
我們基于HS Code 文本歸類模型,統(tǒng)計了模型預測失敗的案例(這些案例都是不在top 3 預測之內,但是都是在top 20 預測之內),分析了這些案例失敗的原因主要如下:
①涉及其他,除非等類別,如9405990000:稅則上解釋是品目9405 所列物品其他材料制零件。9401790000:稅則上解釋是其他金屬框架的坐具。這類失敗案例的優(yōu)化涉及到知識推理,本體邏輯推理等等,難度非常大,知識推理需要較長時間研究,我們會在后續(xù)研究中進一步完善。
②涉及到范圍推理或者成分推理,如8536901100:稅則上解釋是工作電壓不超過36 伏的接插件。
③品名跨多個類,但是根據(jù)成分、制備、用途來確定具體的HS Code。
其中,涉及其他,除非等類別的失敗案例比例高達72%以上,這里就涉及到了稅則語義推理的研究了。目前稅則語義推理的整體算法方案正在全力調研中,是下一步的研究工作。
我們對前面的設計進行了實現(xiàn),并在某外綜服平臺上進行測試驗證,測試數(shù)據(jù)分布如圖7 所示,所有產品的HS Code 數(shù)據(jù)都能在www.hsbianma.com 網站上查詢到,我們選擇7、8、11、16、20 等5 個產品大類的數(shù)據(jù)進行測試,這些測試數(shù)據(jù)基本涵蓋了本文分析的HS Code 數(shù)據(jù)的所有特性,測試結果如表4 所示,我們同時使用最大熵模型對HS Code 產品進行分類來測試預測Top5 的準確率,實驗數(shù)據(jù)表明基于深度學習預測的HS Code 平均Top5 準確率達到0.904422,而基于最大熵模型方法的平均預測準確率只有0.825588,基于深度學習的分類預測方法準確率明顯高于基于最大熵模型的分類方法,我們同時給出了基于深度學習方法對HS Code 產品分類預測的Top1 準確率、Top3 準確率和Top10 準確率供參考,其中Top1 預測平均準確率達到了0.766517,已經超越了商用的預期值0.75。
圖7 測試數(shù)據(jù)分布圖
表4 實驗結果數(shù)據(jù)
(1)用戶輸入產品品名
圖8 產品品名輸入截圖
(2)用戶點選類目
圖9 點選類目截圖
(3)用戶輸入詳細產品描述
圖10 輸入產品描述
(4)HS Code 自動歸類結果
圖11 HS Code自動歸類結果展示
本文中,我們研究了基于深度學習的HS Code 產品分類方法,首先對HS Code 的數(shù)據(jù)特征進行分析,接著對整體算法進行總體設計,然后對算法框架中的每個環(huán)節(jié)進行詳細的設計和分析,最后依賴某外綜服平臺實現(xiàn)了該分類方法并進行了實驗驗證和分析,實驗結果表明基于深度學習的HS Code 產品分類方法準確率很高,優(yōu)于基于最大熵模型的分類方法。同時在方法研究實踐過程中,我們也發(fā)現(xiàn)該方法目前的一些不足,例如數(shù)據(jù)不平衡需要引入語義對抗網絡,這些問題有待我們下一步進行研究,并且進行更多的驗證。