中文文本使用包含数万个字符的字符集。汉语中的单词最常由1,2或3个字符组成。汉语文本中的单词之间没有空格或其他标记,因为母语为母语的人可以很容易地将单词从文本中分割出来。为了帮助语言学习工具,有一种自动的方法来分割文本块中的单词是很有帮助的。
有些方法使用基于字典的贪婪算法方法,但由于大多数贪婪算法存在的常见问题,容易失败。
我想尝试使用神经网络,但我的问题是,如何编码字符到网络的输入神经元?
我不是在说OCR。这些字符已经在unicode中被知道和编码,但是我如何将这些字符呈现给网络的输入呢?
我可以想象的一种方法是让网络一次以100个字符的部分查看文本,并且每个字符都有一个神经元。但是,我将如何将这个角色表示为网络的一个数字呢?对字符使用unicode整数值似乎不是个好主意。
发布于 2020-08-14 08:38:27
因此,主要的问题是如何在你的中文分词任务中表示汉字。
由于这些字符实际上是非序数的范畴变量,所以我们将这些字符表示为维数n=数据集中唯一汉字数的一个热编码(https://medium.com/@michaeldelsole/what-is-one-hot-encoding-and-how-to-do-it-f0ae272f1179)。
有时n可能很大。因此,在这种情况下,我们通常有一个嵌入层,它可以减少数据的稀疏性,并折叠维数。(https://www.tensorflow.org/api_docs/python/tf/keras/layers/Embedding#:~:text=Arguments%20%20%20%20input_%20%20%20%20%20%20%20%20%20%)
发布于 2020-09-16 16:27:37
我认为这里隐藏着三个问题:
让我们一个接一个地对他们说:
对离散元素进行编码的典型方法,如本例中,是使用封闭字典。在这种情况下,要编码的元素是字符,因此我们应该:
考虑到这个问题可以类似于语言建模任务,我想说最合适的架构是LSTM/格鲁、一维卷积网络和变压器 (或其变体之一)。如果我们的架构能够处理无限的上下文,我们可能会从中受益,所以我要说,选择是在LSTM和TransformerXL之间。我认为分词不应该需要很重的处理,所以我会选择LSTM,这在推理时非常轻。
由于字符是离散的,网络的第一层将是嵌入层,将离散字符编码为连续向量。这些向量的大小是一个超参数,我们应该决定它的值。
网络的输出可以是一个字开始的字符位置为1,而在其他位置为0。
中
考虑到我们建议使用一种能够处理无限上下文的神经结构,那么我们也应该在输入数据准备过程中支持它,如果我们选择LSTMs,则使用截断的回传时间(TBPTT),在这种情况下,我们可以准备小型批处理,以便获取批处理的最后一个隐藏状态并用于下一个批的初始化。
https://datascience.stackexchange.com/questions/80184
复制相似问题