2018 年 12 月 19 日 — 由 Laurence Moroney 和 Edward Loper 发布
TensorFlow 现在支持 Unicode,这是一个用于表示几乎所有语言字符的标准编码系统。在处理自然语言时,了解字符如何在字节字符串中编码非常重要。在字符集较小的语言(如英语)中,每个字符可以使用 ASCII 编码在一个字节中进行编码。但是,这种方法不适合其他语言,例如汉语,汉语有数千个字符。即使在处理英文文本时,特殊字符(如 表情符号)也无法使用 ASCII 进行编码。
0
和 0x10FFFF
之间。当代码点按顺序排列时,就会形成一个 _Unicode 字符串_。"语言处理"
(中文意思是“语言处理”)进行编码。# Unicode string, represented as a vector of code points.
text_chars = tf.constant([35821, 35328, 22788, 29702])
# Unicode string, represented as a UTF-8-encoded string scalar.
text_utf8 = tf.constant('\xe8\xaf\xad\xe8\xa8\x80\xe5\xa4\x84\xe7\x90\x86')
# Unicode string, represented as a UTF-16-BE-encoded string scalar.
text_utf16be = tf.constant('\x8b\xed\x8a\x00Y\x04t\x06')
当然,您可能需要在表示形式之间进行转换,而 TensorFlow 1.13 添加了用于执行此操作的函数tf.strings.unicode_decode
:将编码的字符串标量转换为代码点向量。tf.strings.unicode_encode
:将代码点向量转换为编码的字符串标量。tf.strings.unicode_transcode
:将编码的字符串标量转换为不同的编码。>>> tf.strings.unicode_decode(text_utf8, input_encoding='UTF-8')
tf.Tensor([35821 35328 22788 29702], shape=(4,), dtype=int32)
在解码包含多个字符串的 Tensor
时,这些字符串的长度可能不同。unicode_decode
将结果返回为 RaggedTensor
,其中内部维度的长度根据每个字符串中的字符数而变化。>>> hello = [b"Hello", b"你好", b"こんにちは", b"Bonjour"]
>>> tf.strings.unicode_decode(hello, input_encoding='UTF-8')
要详细了解 TensorFlow 中的 Unicode 支持,请查看 Unicode 教程 Colab 并浏览 tf.strings
文档.