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 で提供されます。
V2インジケーター
V1インジケーター

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 つの単一の文は構造的に互いに独立しています
核となる関係 ヘッド 文全体の核心を指す

おすすめ

転載: blog.csdn.net/weixin_44826203/article/details/108472878