LAC全名為Lexical Analysis of Chinese,是百度自然語言處理部研發的一款聯合的詞法分析工具,實現中文分詞、詞性標註、專名識別等功能。該工具具有以下特點與優勢:
在此我們主要介紹Python安裝與使用,其他語言使用:
程式碼相容Python2/3
全自動安裝: pip install lac
半自動下載:先下載http://pypi.python.org/pypi/lac/,解壓縮後執行python setup.py install
安裝完成後可在命令列輸入lac
或lac --segonly
, lac --rank
啟動服務,進行快速體驗。
國內網路可使用百度源安裝,安裝速率更快:
pip install lac -i https://mirror.baidu.com/pypi/simple
from LAC import LAC
# 装载分词模型
lac = LAC ( mode = 'seg' )
# 单个样本输入,输入为Unicode编码的字符串
text = u"LAC是个优秀的分词工具"
seg_result = lac . run ( text )
# 批量样本输入, 输入为多个句子组成的list,平均速率会更快
texts = [ u"LAC是个优秀的分词工具" , u"百度是一家高科技公司" ]
seg_result = lac . run ( texts )
【单样本】:seg_result = [LAC, 是, 个, 优秀, 的, 分词, 工具]
【批量样本】:seg_result = [[LAC, 是, 个, 优秀, 的, 分词, 工具], [百度, 是, 一家, 高科技, 公司]]
from LAC import LAC
# 装载LAC模型
lac = LAC ( mode = 'lac' )
# 单个样本输入,输入为Unicode编码的字符串
text = u"LAC是个优秀的分词工具"
lac_result = lac . run ( text )
# 批量样本输入, 输入为多个句子组成的list,平均速率更快
texts = [ u"LAC是个优秀的分词工具" , u"百度是一家高科技公司" ]
lac_result = lac . run ( texts )
每個句子的輸出其切詞結果word_list以及對每個單字的標註tags_list,其格式為(word_list, tags_list)
【单样本】: lac_result = ([百度, 是, 一家, 高科技, 公司], [ORG, v, m, n, n])
【批量样本】:lac_result = [
([百度, 是, 一家, 高科技, 公司], [ORG, v, m, n, n]),
([LAC, 是, 个, 优秀, 的, 分词, 工具], [nz, v, q, a, u, n, n])
]
詞性和專名類別標籤集合如下表,其中我們將最常用的4個專名類別標記為大寫的形式:
標籤 | 意義 | 標籤 | 意義 | 標籤 | 意義 | 標籤 | 意義 |
---|---|---|---|---|---|---|---|
n | 普通名詞 | f | 方位名詞 | s | 處所名詞 | nw | 作品名 |
nz | 其他專名 | v | 普通動詞 | vd | 動副詞 | vn | 名動詞 |
a | 形容詞 | ad | 副形詞 | an | 名形詞 | d | 副詞 |
m | 數量詞 | q | 量詞 | r | 代名詞 | p | 介詞 |
c | 連接詞 | u | 助詞 | xc | 其他虛詞 | w | 標點符號 |
PER | 人名 | LOC | 地名 | ORG | 機構名 | TIME | 時間 |
from LAC import LAC
# 装载词语重要性模型
lac = LAC ( mode = 'rank' )
# 单个样本输入,输入为Unicode编码的字符串
text = u"LAC是个优秀的分词工具"
rank_result = lac . run ( text )
# 批量样本输入, 输入为多个句子组成的list,平均速率会更快
texts = [ u"LAC是个优秀的分词工具" , u"百度是一家高科技公司" ]
rank_result = lac . run ( texts )
【单样本】:rank_result = [['LAC', '是', '个', '优秀', '的', '分词', '工具'],
[nz, v, q, a, u, n, n],[3, 0, 0, 2, 0, 3, 1]]
【批量样本】:rank_result = [
(['LAC', '是', '个', '优秀', '的', '分词', '工具'],
[nz, v, q, a, u, n, n], [3, 0, 0, 2, 0, 3, 1]),
(['百度', '是', '一家', '高科技', '公司'],
[ORG, v, m, n, n], [3, 0, 2, 3, 1])
]
詞語重要性各類別標籤集合如下表,我們使用4-Level梯度進行分類:
標籤 | 意義 | 常見於詞性 |
---|---|---|
0 | query中表述的冗餘詞 | p, w, xc ... |
1 | query中限定較弱的詞 | r, c, u ... |
2 | query中強限定的詞 | n, s, v ... |
3 | query中的核心詞 | nz, nw, LOC ... |
在模型輸出的基礎上,LAC也支援使用者配置客製化的切分結果和專名類型輸出。當模型預測配對到字典的中的item時,會以客製化的結果取代原有結果。為了實現更精確的匹配,我們支援以由多個單字組成的長片段作為一個item。
我們透過裝載字典檔案的形式來實現該功能,字典檔案每行表示一個客製化的item,由一個單字或多個連續的單字組成,每個單字後使用'/'表示標籤,如果沒有'/'標籤則會使用模型預設的標籤。每個item單字數越多,介入效果就會越精準。
字典文件範例
這裡僅作為範例,展現各種需求情況下的結果。後續也將開放以通配符配置字典的模式,敬請期待。
春天/SEASON
花/n 开/v
秋天的风
落 阳
from LAC import LAC
lac = LAC ()
# 装载干预词典, sep参数表示词典文件采用的分隔符,为None时默认使用空格或制表符't'
lac . load_customization ( 'custom.txt' , sep = None )
# 干预后结果
custom_result = lac . run ( u"春天的花开秋天的风以及冬天的落阳" )
春天/TIME 的/u 花开/v 秋天/TIME 的/u 风/n 以及/c 冬天/TIME 的/u 落阳/n
春天/SEASON 的/u 花/n 开/v 秋天的风/n 以及/c 冬天/TIME 的/u 落/n 阳/n
我們也提供了增量訓練的接口,用戶可以使用自己的數據,進行增量訓練,首先需要將數據轉換為模型輸入的格式,並且所有數據文件均為"UTF-8"編碼:
數據範例
與大多數開源分詞資料集格式一致,使用空格作為單字切分標記,如下所示:
LAC 是 个 优秀 的 分词 工具 。
百度 是 一家 高科技 公司 。
春天 的 花开 秋天 的 风 以及 冬天 的 落阳 。
from LAC import LAC
# 选择使用分词模型
lac = LAC ( mode = 'seg' )
# 训练和测试数据集,格式一致
train_file = "./data/seg_train.tsv"
test_file = "./data/seg_test.tsv"
lac . train ( model_save_dir = './my_seg_model/' , train_data = train_file , test_data = test_file )
# 使用自己训练好的模型
my_lac = LAC ( model_path = 'my_seg_model' )
範例數據
在分詞資料的基礎上,每個單字以「/type」的形式標記其詞性或實體類別。值得注意的是,詞法分析的訓練目前僅支援標籤系統與我們一致的資料。後續也會開放支援新的標籤體系,敬請期待。
LAC/nz 是/v 个/q 优秀/a 的/u 分词/n 工具/n 。/w
百度/ORG 是/v 一家/m 高科技/n 公司/n 。/w
春天/TIME 的/u 花开/v 秋天/TIME 的/u 风/n 以及/c 冬天/TIME 的/u 落阳/n 。/w
from LAC import LAC
# 选择使用默认的词法分析模型
lac = LAC ()
# 训练和测试数据集,格式一致
train_file = "./data/lac_train.tsv"
test_file = "./data/lac_test.tsv"
lac . train ( model_save_dir = './my_lac_model/' , train_data = train_file , test_data = test_file )
# 使用自己训练好的模型
my_lac = LAC ( model_path = 'my_lac_model' )
.
├── python # Python调用的脚本
├── c++ # C++调用的代码
├── java # Java调用的代码
├── Android # Android调用的示例
├── README.md # 本文件
└── CMakeList.txt # 编译C++和Java调用的脚本
如果您的學術工作成果中使用了LAC,請您增加下述引用。我們非常欣慰LAC能夠為您的學術工作帶來幫助。
@article{jiao2018LAC,
title={Chinese Lexical Analysis with Deep Bi-GRU-CRF Network},
author={Jiao, Zhenyu and Sun, Shuqi and Sun, Ke},
journal={arXiv preprint arXiv:1807.01882},
year={2018},
url={https://arxiv.org/abs/1807.01882}
}
我們歡迎開發者向LAC貢獻程式碼。如果您開發了新功能,發現了bug…歡迎提交Pull request與issue到Github。