下方示例使用 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 處理更多字符串。