NLP入門3 - 構文解析(LTP4ベース)
0. はじめに
この記事では、主に LTP ツールに基づいた NLP の構文構造分析を紹介し、そのプロセスにおける LTP の他の機能の使用についても紹介します。
1.LTPの概要
LTP (Language Technology Platform) は、一連の中国語自然言語処理ツールを提供しており、ユーザーはこれらのツールを使用して、中国語テキストの単語分割、品詞タグ付け、構文分析を実行できます。
git: https://github.com/HIT-SCIR/ltp
2.インストール
2.1 モジュールのインストール
古いバージョンの ltp のインストールに問題があり、Linux で pip を実行すると、バージョン 0.2.1 がデフォルトでインストールされます。
pip install pyltp
Windows では問題が発生します。https://github.com/HIT-SCIR/pyltp/issues/125
を参照してください。 ltp4 をワンクリックでインストールすることをお勧めします。
pip install ltp
2.2 モデルのダウンロード
公式 git にはモデルのダウンロード リンクがあり、V1 と V2 の 2 つのバージョンと、小規模と極小の 3 つのモデル ベースが含まれます。
同時に、2 つのバージョンのさまざまなインジケーターが公式 git で提供されます。
3.使用する
3.1条項
from ltp import LTP
ltp = LTP('../ltp_model/base') # 加载模型,路径是模型文件解压后的文件夹
# 后面的代码全都省略了模型加载这一步
sents = ltp.sent_split(["吃葡萄不吐葡萄皮。不吃葡萄倒吐葡萄皮。"])
sents
# [out]: ['吃葡萄不吐葡萄皮。', '不吃葡萄倒吐葡萄皮。']
3.2 単語の分割
segment, hidden = ltp.seg(["南京市长江大桥"])
segment
# [out]: [['南京市', '长江', '大桥']]
他の単語セグメンテーション ツールと同様に、LTP はカスタム辞書の機能も提供しており、カスタム辞書をロードするパスを指定できます。
ltp.init_dict(path="user_dict.txt", max_window=4)
カスタム語彙を直接入力し、カスタム単語セグメンテーション結果を追加することもできます。
ltp.add_words(words=["市长", "江大桥"], max_window=4)
segment, hidden = ltp.seg(["南京市长江大桥"])
segment
# [out]: [['南京', '市长', '江大桥']]
3.3 品詞のタグ付け
pos = ltp.pos(hidden)
pos
# [out]: [['ns', 'ns', 'n']] # 这个结果对应的是 [['南京市', '长江', '大桥']]
品詞タグ付けの結果は単語分割結果に対応し、結果の ns についてはパート 4 で説明します。
3.4 固有表現の認識
ltp も固有表現認識のタスクを完了できますが、複雑なタスクにはより複雑なモデルを使用する方が良いため、ltp のパラメータはここにあります。
ner = ltp.ner(hidden)
ner
# [out]: [[('Nh', 0, 0), ('Ns', 1, 1), ('Nh', 2, 2)]]
for i in range(len(ner[0])): # 因为只有一个句子,所以直接取了ner[0]
print("{}:".format(ner[0][i][0]), segment[0][ner[0][i][1]: ner[0][i][2]+1])
# [out]: Nh: ['南京']
# Ns: ['市长']
# Nh: ['江大桥']
残念ながら、結果は予想どおりあまり正確ではなく、南京は人名として認識されました。品詞のタグ付けに関しては、ltp は細分化されすぎているため、実際の申請プロセスでは動詞と名詞の判定だけで済みますが、名前や場所をタグ付けしたい場合は、特別な NER モデルを使用して完了するのが最適です。
3.5 依存関係の構文解析
ltp.add_words(words=["市长", "江大桥"], max_window=4)
segment, hidden = ltp.seg(["南京市长江大桥是南京市的市长"])
print(segment)
dep = ltp.dep(hidden)
dep
# [out]: [['南京', '市长', '江大桥', '是', '南京市', '的', '市长']]
# [out]: [[(1, 2, 'ATT'),
# (2, 3, 'ATT'),
# (3, 4, 'SBV'),
# (4, 0, 'HED'),
# (5, 7, 'ATT'),
# (6, 5, 'RAD'),
# (7, 4, 'VOB')]]
例えば、ATTは中国と中国の関係、つまり帰属語と中心語を表しており、南京は市長の帰属語、市長は江大喬氏の帰属語である。これらの関係には多くの実際的な応用例があり、たとえば、これらの関係に基づいて、固有表現認識において、エンティティが見つかった後、エンティティの修飾子が完成されるなどです。
4. 説明
4.1 品詞のタグ付け
略語 | 説明 | 例 |
---|---|---|
ある | 形容詞: 形容詞 | 美しさ |
b | other noun-modifier: 他の修飾名詞 | 大きい、西洋風 |
c | 接続詞:接続詞 | そして、しかし |
d | 副詞:副詞 | とても |
e | 感嘆符: 感嘆符 | なぜ |
g | 形態素 | 茨, 甥 |
h | 接頭語: 接頭語 | 偽物 |
私 | イディオム:イディオム | 百の花を咲かせましょう |
j | 略語: 略語 | 治安維持法 |
k | サフィックス: サフィックス | 限界率 |
メートル | 番号: 番号 | まず一つ |
n | 一般名詞:一般名詞 | りんご |
nd | 方向名詞: 方向名詞 | 右 |
んー | 人名:人名 | 杜甫、トム |
の | 組織名:会社名 | 保険会社 |
nl | 場所名詞: 場所名詞 | 郊外 |
ns | 地理名: 地理名詞 | 北京 |
nt | 時間名詞:時間の名詞 | 最近、明の時代 |
ニュージーランド | その他の固有名詞: その他の名詞 | ノーベル賞 |
ああ | オノマトペ:オノマトペ | クラッシュ |
p | 前置詞: 前置詞 | 入れて |
q | 数量: 数量子 | 個人の |
r | 代名詞:代名詞 | 私たち |
あなた | 補助語:補助語 | 接地 |
v | 動詞:動詞 | 走る、勉強する |
うーん | 句読点: 句読点 | 、。 |
うーん | 外来語:外来語 | CPU |
バツ | 非語彙素: 単語を形成しません | ぶどう、あお |
4.2 依存関係の構文解析
関係タイプ | 鬼ごっこ | 説明 | 例 |
---|---|---|---|
主語と動詞の関係 | SBV | 主語-動詞 | 私は彼女に花束を送ります(私は送ります) |
動詞と目的語の関係 | VOB | 直接目的語、動詞目的語 | 私は彼女に花束を送ります(送る –> 花) |
ゲスト関係 | IOB | 間接オブジェクト、間接オブジェクト | 私は彼女に花束を送ります(送る –> 彼女) |
前置詞目的語 | FOB | 前面オブジェクト、前面オブジェクト | 彼は何でも読みます (本 <– 読む) |
同時言語 | DBL | ダブル | 彼は私を夕食に招待します(お願いします –> 私) |
固定された関係 | に | 属性 | レッドアップル (レッド <– アップル) |
状態構造 | ADV | 副詞的な | とても美しい (とても <– 美しい) |
動詞の構造 | CMP | 補体 | 宿題が終わりました(完了 –> 完了) |
星座 | COO | 座標 | 山と海(山→海) |
ゲストリレーションズ | POB | 前置詞-目的語 | 商圏内( –> 内) |
左アタッチメント | 若者 | 左付属 | 山と海 (そして <– 海) |
右アタッチ関係 | ラッド | 右付属物 | 子供 (子供 –> 子供) |
独立した構造 | は | 独立した構造 | 2 つの単一の文は構造的に互いに独立しています |
核となる関係 | ヘッド | 頭 | 文全体の核心を指す |