[

Sai Sagar Chilakapati

](https://sschilakapati..com/?source=post_page-----106156aee152--------------------------------)

在这篇博文中,我将分享我所学到的关于文本生成的知识。当我深入人工智能和机器学习的世界时,这对我来说是一次相当大的探索之旅。我想了解计算机如何生成文本,所以我做了一些挖掘。

一路走来,我遇到了不同的方法和模型,我很高兴与您分享我的发现。我们将首先讨论称为马尔可夫链的东西,然后转向更高级的东西,例如 OpenAI 的 GPT。

让我们一起探索计算机如何创建文本以及为什么它在当今的技术世界中如此重要。

 什么是马尔可夫链?

马尔可夫链是对一系列事件中从一种状态到另一种状态的转换进行建模的数学系统。

这些链以俄罗斯数学家安德烈·马尔可夫的名字命名,其特点是马尔可夫性质,该性质表明过渡到下一个状态的概率仅取决于当前状态,而不取决于导致该状态的事件顺序。

了解马尔可夫链文本生成:

在文本生成中,马尔可夫链用于根据给定的文本语料库对从一个单词(或标记)转换到另一个单词(或标记)的概率进行建模。

基本思想是构建一个字典,其中每个单词作为键,关联值是训练文本中经常跟随关键字的单词列表。

生成文本时,我们从种子词开始,查找其关联的可能下一个单词的列表,并随机选择其中一个来继续序列。

通过根据马尔可夫链中的概率迭代地选择单词,我们可以生成模仿训练数据的风格和模式的新文本。

为了更好地理解马尔可夫链,让我们看一些简单的 JavaScript 代码:

<span id="ce43" data-selectable-paragraph=""><br><span>class</span> <span>MarkovChain</span> {<br>    <span>constructor</span>() {<br>        <span>this</span>.<span>chain</span> = {}; <br>    }<br><br>    <br>    <span>train</span>(<span>text</span>) {<br>        <br>        <span>const</span> words = text.<span>split</span>(<span>/\s+/</span>);<br>        <br>        <span>for</span> (<span>let</span> i = <span>0</span>; i &lt; words.<span>length</span> - <span>1</span>; i++) {<br>            <span>const</span> currentWord = words[i]; <br>            <span>const</span> nextWord = words[i + <span>1</span>]; <br>            <br>            <span>if</span> (!<span>this</span>.<span>chain</span>[currentWord]) {<br>                <br>                <span>this</span>.<span>chain</span>[currentWord] = [];<br>            }<br>            <br>            <span>this</span>.<span>chain</span>[currentWord].<span>push</span>(nextWord);<br>        }<br>    }<br><br>    <br>    <span>generate</span>(<span>seed, length = <span>20</span></span>) {<br>        <span>let</span> currentWord = seed; <br>        <span>let</span> generatedText = seed; <br><br>        <br>        <span>for</span> (<span>let</span> i = <span>0</span>; i &lt; length; i++) {<br>            <span>const</span> nextWords = <span>this</span>.<span>chain</span>[currentWord]; <br>            <br>            <span>if</span> (!nextWords || nextWords.<span>length</span> === <span>0</span>) {<br>                <span>break</span>; <br>            }<br>            <br>            <span>const</span> nextIndex = <span>Math</span>.<span>floor</span>(<span>Math</span>.<span>random</span>() * nextWords.<span>length</span>);<br>            <span>const</span> nextWord = nextWords[nextIndex];<br>            generatedText += <span>' '</span> + nextWord; <br>            currentWord = nextWord; <br>        }<br><br>        <span>return</span> generatedText; <br>    }<br>}<br><br><br><span>const</span> textData = <span>`<br>    FROM off a hill whose concave womb reworded<br>A plaintful story from a sistering vale,<br>My spirits to attend this double voice accorded,<br>And down I laid to list the sad-tuned tale;<br>Ere long espied a fickle maid full pale,<br>Tearing of papers, breaking rings a-twain,<br>Storming her world with sorrow's wind and rain.<br><br>Upon her head a platted hive of straw,<br>Which fortified her visage from the sun,<br>Whereon the thought might think sometime it saw<br>The carcass of beauty spent and done:<br>Time had not scythed all that youth begun,<br>Nor youth all quit; but, spite of heaven's fell rage,<br>Some beauty peep'd through lattice of sear'd age.<br>`</span>;<br><br><br><span>const</span> markovModel = <span>new</span> <span>MarkovChain</span>();<br><br>markovModel.<span>train</span>(textData);<br><br><br><span>const</span> generatedText = markovModel.<span>generate</span>(<span>'Upon'</span>, <span>10</span>);<br><span>console</span>.<span>log</span>(generatedText); </span>
  • generate 方法以提供的 seed 单词开头。
  • 然后它迭代指定的 length ,根据马尔可夫链模型生成下一个单词。
  • 对于每次迭代,它都会在马尔可夫链的字典中查找 currentWord 以找到可能的下一个单词。
  • 如果没有下一个单词或者 currentWord 不存在于字典中,则会跳出循环。
  • 如果有下一个单词可用,它会随机选择其中一个单词附加到生成的文本中。
  • 它将 currentWord 更新为新生成的单词,并继续该过程,直到达到所需的长度。

此代码创建一个马尔可夫链模型并使用一些示例文本对其进行训练。然后,它根据起始词生成新文本。这是一个基本示例,但它让您了解马尔可夫链在实践中如何工作。

转向高级模型:

现在我们已经掌握了使用马尔可夫链生成基本文本,让我们来谈谈更高级的模型,例如 OpenAI 的 GPT。

这些模型建立在复杂的神经网络架构(例如 Transformer)之上,能够捕获文本中的复杂模式和远程依赖性,并接受了来自互联网的大量文本的训练。

他们使用奇特的数学和算法不仅可以计算出接下来出现的单词,还可以计算出整个句子应该是什么!我们在人工智能领域已经取得了如此大的进步,真是令人惊讶。

 结论:

文本生成是一个结合了语言学、统计学和计算机科学的迷人领域。从马尔可夫链等简单模型到 GPT 等尖端技术,我们已经看到计算机如何以极高的准确性生成文本。

随着我们不断探索和开发这些模型,人工智能驱动的文本生成的可能性是无限的。无论是聊天机器人、内容创建还是语言翻译,文本生成在塑造技术的未来方面都发挥着至关重要的作用。

我希望这篇博客能让您深入了解人工智能和机器学习这个令人兴奋的领域。感谢您加入我的旅程!

 参考链接

  聊天 GPT

马尔可夫链及其在机器学习中的应用指南