LAC とは、Lexical Analysis of Chinese の正式名称で、Baidu の自然言語処理部門が共同開発した、中国語の単語分割、品詞タグ付け、固有名認識などの機能を実現する共同語彙解析ツールです。このツールには次の機能と利点があります。
ここでは主にPythonのインストールと使い方、その他の言語の使い方を紹介します。
Python2/3と互換性のあるコード
完全自動インストール: pip install lac
半自動ダウンロード: まず http://pypi.python.org/pypi/lac/ をダウンロードし、解凍してpython setup.py install
を実行します。
インストールが完了したら、コマンド ラインにlac
またはlac --segonly
またはlac --rank
入力してサービスを開始すると、簡単に操作できます。
国内ネットワークでは Baidu ソースのインストールを使用でき、インストール速度が速くなります:
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 | 場所名詞 | 新しい | 作品名 |
ニュージーランド | その他の固有名詞 | v | 一般的な動詞 | ビデオ | 動詞副詞 | vn | 名詞 動詞 |
ある | 形容詞 | 広告 | 副詞 | の | 名詞 | d | 副詞 |
メートル | 数量子 | q | 量指定子 | r | 代名詞 | p | 前置詞 |
c | 接続詞 | あなた | 粒子 | xc | その他の機能語 | w | 句読点 |
PER | 名前 | LOC | 地名 | 組織 | 組織名 | 時間 | 時間 |
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 レベルの勾配を使用します。
ラベル | 意味 | 品詞的によくあること |
---|---|---|
0 | クエリで表現された冗長な単語 | p、w、xc ... |
1 | クエリ内の弱修飾語 | r、c、u... |
2 | クエリ内の強力に修飾された単語 | n、s、v... |
3 | クエリの中心となる単語 | ニュージーランド、ニュージーランド、ロンドン ... |
LAC は、モデル出力に基づいて、ユーザーがカスタマイズされたセグメンテーション結果と固有名タイプの出力を構成することもサポートします。モデルが辞書に一致する項目を予測すると、元の結果がカスタマイズされた結果に置き換えられます。より正確なマッチングを実現するために、複数の単語から構成される長いフラグメントをアイテムとしてサポートします。
この関数は、辞書ファイルをロードすることによって実装されます。辞書ファイルの各行は、1 つの単語または複数の連続した単語で構成されるカスタマイズされた項目を表します。「/」がない場合は、各単語の後に「/」が使用されます。 label モデルのデフォルトのラベルが使用されます。項目ごとの単語数が多いほど、介入効果はより正確になります。
辞書ファイルの例
これは、さまざまな要件の下での結果を示すための単なる一例です。ワイルドカードを使用して辞書を構成するモードは将来オープンされる予定ですので、ご期待ください。
春天/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 にコードを貢献することを歓迎します。新しい機能を開発してバグを見つけた場合は、プル リクエストや問題を Github に送信してください。