zh_segmentation:基於 Chinese Treebank 6.0 構建的中文分詞模型

2021-02-20 TensorFlow

下方示例使用 Python 3 和以下設定:

MODEL_HANDLE = "https://hub.tensorflow.google.cn/google/zh_segmentation/1"


原生 TF2,Eager 模式

import tensorflow_text as text

# 實例化 HubModuleTokenizer 需要一定時間,因此最好創建
# 一個實例,將其(重複)用於多個查詢。
segmenter = text.HubModuleTokenizer(MODEL_HANDLE)

# 分割由兩個字符串組成的單個批次。
input_text = ["新華社北京", "北京"]
tokens, starts, ends = segmenter.tokenize_with_offsets(input_text)

# 預期結果為:
assert tokens.to_list() == [
["新華社".encode("utf-8"), "北京".encode("utf-8")],
["北京".encode("utf-8")]
]
assert starts.to_list() == [[0, 9], [0]]
assert ends.to_list() == [[9, 15], [6]]

# 可以使用「segmenter」處理更多字符串。
...

第一段文本("新華社北京")將分割為兩個分詞:"新華社"和"北京"。第一個分詞開頭的字節偏移量為 0,結尾恰好落在相對於輸入字符串開頭字節偏移量為 9 的位置前(即字節偏移量為 8 的位置)。第二個分詞開頭的字節偏移量為 9,結尾恰好落在字節偏移量為 15 的位置前。請注意,這些偏移量以字節(而非 Unicode 字符數)為單位。第二段文本("北京")僅由一個分詞組成。

TF1 兼容模式

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

import tensorflow_text as text

# 構建 TensorFlow 圖
segmentation_graph = tf.Graph()
with segmentation_graph.as_default():
input_text = tf.placeholder(dtype=tf.string, shape=(None,))
segmenter = text.HubModuleTokenizer(MODEL_HANDLE)
tokens, starts, ends = segmenter.tokenize_with_offsets(input_text)

with tf.Session(graph=segmentation_graph) as sess:
# 執行初始化
sess.run(tf.tables_initializer())
sess.run(tf.global_variables_initializer())
sess.run(tf.local_variables_initializer())

# 使用 TF 圖分割兩個字符串
results = sess.run(
[tokens, starts, ends],
feed_dict={input_text: ["新華社北京", "北京"]})

# 預期結果為:
assert results[0].to_list() == [
["新華社".encode("utf-8"), "北京".encode("utf-8")],
["北京".encode("utf-8")]
]
assert results[1].to_list() == [[0, 9], [0]]
assert results[2].to_list() == [[9, 15], [6]]

# 可以使用 segmentation_graph 處理更多字符串。

相關焦點

  • 中文分詞工具評估:chinese-segmentation-evaluation
    //github.com/tiandiweizun/chinese-segmentation-evaluation最近我們分享了一些關於分詞的事情,對於琳琅滿目的分詞工具,我們到底該選擇哪個呢?這裡有一個Java開源項目cws_evaluation,對中文分詞做了評比,但有幾點不足:(1). 只有java版本,但是機器學習主要是基於python的 (2).效果指標為行完美率和字完美率,該指標不妥,特別是句子越長,越無意義,(3). 每種分詞工具評測的算法太多了,這裡僅評比了默認的分詞算法。
  • Awesome-Chinese-NLP:中文自然語言處理相關資料
    Jieba 結巴中文分詞 (Python及大量其它程式語言衍生) 做最好的 Python 中文分詞組件北大中文分詞工具 (Python) 高準確度中文分詞工具,簡單易用,跟現有開源工具相比大幅提高了分詞的準確率。
  • 常用的開源中文分詞工具
    層疊隱馬爾可夫模型( Hierarchical Hidden Markov Model ) ,該分詞系統的主要是思想是先通過 CHMM( 層疊形馬爾可夫模型 ) 進行分詞 , 通過分層 , 既增加了分詞的準確性 , 又保證了分詞的效率 . 共分五層, 如下圖所示。
  • 支持53種語言預訓練模型,斯坦福發布全新NLP工具包StanfordNLP
    3.6 及之後版本,並基於 PyTorch,支持多種語言的完整文本分析管道,包括分詞、詞性標註、詞形歸併和依存關係解析,此外它還提供了與 CoreNLP 的 Python 接口。StanfordNLP 用高度準確的神經網絡構建而成,允許使用自己的標註數據進行高效訓練和評估。這些模塊基於 PyTorch 構建。
  • Hive基於UDF進行文本分詞
    在elasticsearch.yml中設置你的sqlite3詞典的位置:ik_analysis_db_path: /opt/ik/dictionary.db2:開源的java中文分詞庫 IKAnalyzer(Star:343)IK Analyzer 是一個開源的,基於java語言開發的輕量級的中文分詞工具包。
  • 中文自然語言處理相關資料集合指南
    Jieba 結巴中文分詞 (Python及大量其它程式語言衍生) 做最好的 Python 中文分詞組件北大中文分詞工具 (Python) 高準確度中文分詞工具,簡單易用,跟現有開源工具相比大幅提高了分詞的準確率。
  • 五款中文分詞工具在線PK: Jieba, SnowNLP, PkuSeg, THULAC, HanLP
    1) Jieba: https://github.com/fxsjy/jieba「結巴」中文分詞:做最好的 Python 中文分詞組件"Jieba" (Chinese for "to stutter") Chinese text segmentation: built to be the best Python Chinese word segmentation
  • 瀚高資料庫的全文(中文)檢索
    4 瀚高全文檢索常見索引    4.1 GIN索引結構    4.2 RUM索引5 基於詞庫的解決方案    5.1 基於SCWS分詞    5.2 基於pg_jieba 分詞6 基於二元分詞的解決方案A 測試用例【基於SCWS分詞的全文檢索測試用例】【基於pg_jieba的全文檢索測試用例】【基於二元分詞的全文檢索測試用例
  • 預訓練永不止步,遊戲問答語言模型實操
    https://github.com/dbiir/UER-py/wiki/Modelzoo首先利用 jieba 分詞進行切詞,並在 jieba 自定義詞典裡加入領域實體詞,生成得到分詞後的訓練數據(all_qa_log.txt),通過腳本構建詞典:#構建領域詞典python3 scripts/build_vocab.py --corpus_path ..
  • 中文分詞入門之資源
    作為中文信息處理的「橋頭堡」,中文分詞在國內的關注度似乎遠遠超過了自然語言處理的其他研究領域。在中文分詞中,資源的重要性又不言而喻,最大匹配法等需要一個好的詞表,而基於字標註的中文分詞方法又需要人工加工好的分詞語料庫。所以想研究中文分詞,第一步需要解決的就是資源問題,這裡曾經介紹過「LDC上免費的中文信息處理資源」,其中包括一個有頻率統計的詞表,共計44405條,就可以作為一個不錯的中文分詞詞表使用。
  • 最全的中文語言處理數據集、平臺和工具!
    資源整理了文本分類、實體識別&詞性標註、搜索匹配、推薦系統、指代消歧、百科數據、預訓練詞向量or模型、中文完形填空等大量數據集,中文數據集平臺和NLP工具等。    以0.7 0.15 0.15做分割 。清華新聞分類語料:    根據新浪新聞RSS訂閱頻道2005~2011年間的歷史數據篩選過濾生成。
  • 最全中文自然語言處理數據集、平臺和工具整理
    資源整理了文本分類、實體識別&詞性標註、搜索匹配、推薦系統、指代消歧、百科數據、預訓練詞向量or模型、中文完形填空等大量數據集,中文數據集平臺和NLP工具等。    以0.7 0.15 0.15做分割 。清華新聞分類語料:    根據新浪新聞RSS訂閱頻道2005~2011年間的歷史數據篩選過濾生成。
  • albert-chinese-ner使用預訓練語言模型ALBERT做中文NER
    AI項目體驗地址 https://loveai.techalbert_zh海量中文語料上預訓練ALBERT模型:參數更少,效果更好。and Comparisionalbert-chinese-ner下載albert中文模型,這裡使用的是base將模型文件夾重命名為albert_base_zh
  • 多標準中文分詞:你需要的小trick
    作為NLP領域中經典任務之一,分詞幾乎是其他所有NLP任務的基礎,開展下遊NLP任務之前,往往需要先對文本進行分詞。多標準分詞(Multi-criteria Chinese word segmentation, MCCWS)的任務目的,即是為了利用多種標準分詞結果的共性知識,來提升單一分詞標準的標註效果。本文提出的模型,可以根據分詞標準指示,基於單一模型,給出不同標準的分詞結果。
  • Android版中文分詞:原理、接入和啟動優化
    中文分詞功能是一項常用的基礎功能,有很多開源的工程實現,目前能應用於Android手機端的中文分詞器沒有很完善的版本。結巴分詞的原理結巴分詞採用兩種方式進行分詞,基於字典的分詞和基於HMM(隱馬爾科夫模型)的分詞。
  • 【NLP】Pytorch中文語言模型bert預訓練代碼
    大部分中文語言模型都是在tensorflow上訓練的,一個常見例子是中文roberta項目。可以參考https://github.com/brightmart/roberta_zh使用pytorch進行中文bert語言模型預訓練的例子比較少。在huggingface的Transformers中,有一部分代碼支持語言模型預訓練(不是很豐富,很多功能都不支持比如wwm)。
  • 用Rasa NLU構建自己的中文NLU系統
    更加重要的是,這樣的開源工具可以本地部署,自己針對實際需求訓練和調整模型,據說對一些特定領域的需求效果要比那些通用的在線NLU服務還要好很多。我們在這裡就簡單介紹使用Rasa NLU構建一個本地部署的特定領域的中文NLU系統。Rasa NLU本身是只支持英文和德文的。中文因為其特殊性需要加入特定的tokenizer作為整個流水線的一部分。
  • 基於Bert-NER構建特定領域中文信息抽取框架
    (Jieba、Pyltp、PkuSeg、THULAC)中文分詞和詞性標註工具性能對比基於Stanford coreNLP的指代消解模型命名實體識別(Name Entity Recognition)是獲取三元組中的實體的關鍵。
  • 基於Bert-NER構建特定領域的中文信息抽取框架(上)
    目前而言,基於深度學習的端到端指代消解模型還達不到生產應用的要求。經過反覆的實驗表明,基於 BertNER 的中文指代消解框架比基於 Stanford coreNLP 的指代消解模型在中文上獲得 更高的準確率和更好的效果,同時實現了主語補齊的功能,有助於抽取更多的有用三元組信息