在自动化任务中,如响应用户输入或从互联网抓取数据,机器生成的文本(bot texts)与人类文本语料库(human text corpus)之间存在明显差异。人类文本语料库是一系列由人类撰写的文本集合,这些文本可能包含叙述、议论、描述等多种风格和格式。机器生成的文本与人类文本的主要区别在于,前者由机器生成,而后者由人类撰写。
Sumeet Lalla,Cognizant的数据科学家,拥有莫斯科高等经济学院的数据科学硕士学位和Thapar大学计算机工程学士学位。拥有5.5年的数据科学和软件工程经验,目前在Cognizant担任数据科学家。
首先,需要收集并预处理英文/印地语文本。使用古腾堡API收集英文小说索引,并使用Jupyter笔记本进行处理。同时,使用ITK和Spacey进行预处理。现在,安装“stopwords”和“wordnet”等分词器以进行词形还原。已经初始化了所有这些工具。如下所示,有一个gutendex web API,可以通过它传递相关参数。
将使用Python库中的‘gutenberg_cleaner’来清理不相关的标题和卷。因为只需要文本、章节名称和书名。将所有这些信息收集到一个单独的文件夹中。现在进行预处理,将移除所有不需要的短语,如won’t、can’t等,分别替换为will not和cannot。这是清理文本的需要。同时,将使用自然语言处理(NLP)技术将句子的首字母大写。
需要创建一个后处理字典,以便将人名替换为真实姓名。这是词性标注的一部分。如下所示,正在初始化多进程处理。使用pool和map来执行它。使用“multiprocessing.cpu_count”获取CPU计数。这将运行之前讨论的预处理函数。
正在为这个文件创建一个语料库。将所有之前清理过的元素合并到一个名为“english_corpus.txt”的单个输出文件中。现在使用John Snow spark NLP,因为它有预训练的词形还原和分词管道。在这里使用pyspark并设置文档组装器来设置分词器。使用印地语的假对称,并得到所需的印地语文本。这里需要做一些手动工作。
在这里,为预处理创建了“get_lemmatized_file”。与英文文本一样,在这里创建了一个NLP spark管道,并将最终列选为完成的词形还原。这将是最终处理过的文本。这应该对所有印地语文件都这样做。
现在回到英文,需要应用TF-IDF和SVD来生成词向量。首先,将对预处理过的文本执行TF向量化。为此,需要将分析器设置为单词。SVD用于降低TF-IDF矩阵的维度。现在必须使用Eckart-Young定理选择一个低秩k近似。
下面的幻灯片解释了用于低秩k近似以获得词向量的SVD。SVD的基本定义。可以使用Eckart-Young-Mirsky定理找到A的值。对于方法,结果是10。将英文向量分解为u、sigma和vt矩阵。将得到矩阵的行子空间。
从简化的SVD矩阵中得到的词向量空间:对于数据,有u-sigma作为行子空间来表示整个词向量在空间中的位置。使用二分查找来获取英文向量。这些向量将存储在字典中以供更快使用。需要进行剥离预处理,然后将其附加到文件和字典中。所以基本上,将在字典中搜索单词并获取相应的向量。如下所示的屏幕截图中,“Speak”这个词被表示为一个具有10列维度的维度。
现在,进入下一步,即生成n-gram。这是获得词向量的最简单方法。要生成n-gram向量,有辅助函数。需要给n-grams函数一个范围。
以下是英文的预处理和词向量创建。将使用一个类似的过程来处理印地语。
谈到机器文本生成,首先需要从语料库中创建英文字典。将获得字符到索引数组。这将有助于获得唯一字符列表。现在设置SEQ_LEN为256,BATCH_SIZE为16。默认情况下,预测长度为200。温度参数(temp.为0.3)将控制模型的预测随机性。如果温度较低,则预测将较少随机性,更准确。
此外,在前向方法中,层将起作用,因为必须进行一些压缩和扩展,因为必须根据输入序列压缩一些维度并扩展它们。最后,将初始化隐藏层,它将是向量0 0。维度将是隐藏的。将其移动到CPU和GPU等设备上。使用torch.device并检查是否有GPU可用。初始化字符级别的RNN,具有所需的超参数。选择了人类语料库的第一行,这是从字符级别获得预测序列的输入序列。
将通过初始化标准来创建训练程序。这也是一个交叉熵损失。正在传递可以被视为标签编码的字符索引向量。选择的周期数为10,000。将训练模型,然后获得预测输出。然后,可以计算损失并使用它进行反向梯度。设置为零梯度以进行评估。
此外,在模型训练完成后,可以将其传递给评估函数。将使用字符到索引字典和索引到字符字典。开始文本将是英文语料库的第一行或任何随机行。默认情况下,预测长度也可以设置为200。相同的管道也可以用于印地语,但编码将是utf-8。因此,在生成机器文件后,必须将其传递给预处理步骤和n-gram向量的生成。