目录

设置TensorFlow.js代码

小莎士比亚数据集

通用句子编码器

莎士比亚独白在行动

终点线

总结


  • 下载项目代码-9.9 MB

TensorFlow+JavaScript。现在,最流行、最先进的AI框架支持地球上使用最广泛的编程语言因此,让我们在Web浏览器中通过深度学习使文本和NLP(自然语言处理)聊天机器人神奇地发生,使用TensorFlow.js通过WebGL加速GPU

这是莎士比亚。在本文(系列的最后一篇)中,我们将使用AI生成一些莎士比亚独白。此处为上一篇文章链接。

设置TensorFlow.js代码

该项目在单个网页中运行。我们将包括TensorFlow.js和通用句子编码器(USE),这是一种基于转换器的预训练语言处理模型。我们将bot输出打印到页面上。两个附加的实用函数,dotProduct并且zipWith,从USE自述例,将帮助我们确定句子相似度。

<html><head><title>Shakespearean Monologue Bot: Chatbots in the Browser with TensorFlow.js</title><script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@2.0.0/dist/tf.min.js"></script><script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/universal-sentence-encoder"></script></head><body><h1 id="status">Shakespearean Monologue Bot</h1><pre id="bot-text"></pre><script>function setText( text ) {document.getElementById( "status" ).innerText = text;}// Calculate the dot product of two vector arrays.const dotProduct = (xs, ys) => {const sum = xs => xs ? xs.reduce((a, b) => a + b, 0) : undefined;return xs.length === ys.length ?sum(zipWith((a, b) => a * b, xs, ys)): undefined;}// zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]const zipWith =(f, xs, ys) => {const ny = ys.length;return (xs.length <= ny ? xs : xs.slice(0, ny)).map((x, i) => f(x, ys[i]));}(async () => {// Your Code Goes Here})();</script></body>
</html>

小莎士比亚数据集

对于这个项目,我们的机器人将使用TinyShakespeare数据集的引用生成自己的莎士比亚脚本。它包含来自莎士比亚戏剧的4万行文字。我们将使用它来创建短语及其下一个短语的集合。

让我们遍历每一行以填充消息数组和匹配的响应数组。该代码应如下所示:

let shakespeare_lines = await fetch( "web/tinyshakespeare.txt" ).then( r => r.text() );
let lines = shakespeare_lines.split( "\n" ).filter( x => !!x ); // Split & remove empty lineslet messages = [];
let responses = [];
for( let i = 0; i < lines.length - 1; i++ ) {messages.push( lines[ i ] );responses.push( lines[ i + 1 ] );
}

通用句子编码器

通用编码器句USE)是“[预先训练]模型编码文本转换成512维的嵌入。有关USE及其体系结构的完整说明,请参阅本系列前面的改进的情绪检测文章。

USE易于使用。让我们在定义网络模型并使用其QnA双编码器之前将其加载到代码中,这将为我们提供所有查询和所有答案的全语句嵌入,其性能应比单词嵌入更好。我们可以使用它来确定最相似的当前消息和响应。

// Load the universal sentence encoder
setText( "Loading USE..." );
let encoder = await use.load();
setText( "Loaded!" );
const model = await use.loadQnA();

莎士比亚独白在行动

因为句子嵌入已经将相似性编码到其向量中,所以我们不需要训练单独的模型。从每3秒一次的硬编码行"ROMEO:"开始,我们将随机选择200行的子集,并让USE进行艰苦的工作。它将使用QnA编码器找出那些行中的哪一条与最后打印的行最相似,然后查找响应。

// Add to the monologue every 3s
setInterval( async () => {// Run the calculation thingsconst numSamples = 200;let randomOffset = Math.floor( Math.random() * messages.length );const input = {queries: [ text ],responses: messages.slice( randomOffset, numSamples )};let embeddings = await model.embed( input );tf.tidy( () => {const embed_query = embeddings[ "queryEmbedding" ].arraySync();const embed_responses = embeddings[ "responseEmbedding" ].arraySync();let scores = [];embed_responses.forEach( response => {scores.push( dotProduct( embed_query[ 0 ], response ) );});let id = scores.indexOf( Math.max( ...scores ) );text = responses[ randomOffset + id ];document.getElementById( "bot-text" ).innerText += text + "\n";});embeddings.queryEmbedding.dispose();embeddings.responseEmbedding.dispose();
}, 3000 );

现在,当您打开页面时,它将开始每3秒写一行莎士比亚作品。

终点线

这是将所有内容组合在一起的代码:

<html><head><title>Shakespearean Monologue Bot: Chatbots in the Browser with TensorFlow.js</title><script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@2.0.0/dist/tf.min.js"></script><script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/universal-sentence-encoder"></script></head><body><h1 id="status">Shakespearean Monologue Bot</h1><pre id="bot-text"></pre><script>function setText( text ) {document.getElementById( "status" ).innerText = text;}// Calculate the dot product of two vector arrays.const dotProduct = (xs, ys) => {const sum = xs => xs ? xs.reduce((a, b) => a + b, 0) : undefined;return xs.length === ys.length ?sum(zipWith((a, b) => a * b, xs, ys)): undefined;}// zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]const zipWith =(f, xs, ys) => {const ny = ys.length;return (xs.length <= ny ? xs : xs.slice(0, ny)).map((x, i) => f(x, ys[i]));}(async () => {let shakespeare_lines = await fetch( "web/tinyshakespeare.txt" ).then( r => r.text() );let lines = shakespeare_lines.split( "\n" ).filter( x => !!x ); // Split & remove empty lineslet messages = [];let responses = [];for( let i = 0; i < lines.length - 1; i++ ) {messages.push( lines[ i ] );responses.push( lines[ i + 1 ] );}// Load the universal sentence encodersetText( "Loading USE..." );let encoder = await use.load();setText( "Loaded!" );const model = await use.loadQnA();let text = "ROMEO:";// Add to the monologue every 3ssetInterval( async () => {// Run the calculation thingsconst numSamples = 200;let randomOffset = Math.floor( Math.random() * messages.length );const input = {queries: [ text ],responses: messages.slice( randomOffset, numSamples )};let embeddings = await model.embed( input );tf.tidy( () => {const embed_query = embeddings[ "queryEmbedding" ].arraySync();const embed_responses = embeddings[ "responseEmbedding" ].arraySync();let scores = [];embed_responses.forEach( response => {scores.push( dotProduct( embed_query[ 0 ], response ) );});let id = scores.indexOf( Math.max( ...scores ) );text = responses[ randomOffset + id ];document.getElementById( "bot-text" ).innerText += text + "\n";});embeddings.queryEmbedding.dispose();embeddings.responseEmbedding.dispose();}, 3000 );})();</script></body>
</html>

总结

本文以及本系列中的其他文章展示了如何在浏览器中直接使用TensorFlow.js和文本数据,以及诸如USE之类的转换器架构模型的功能,以完成自然语言处理任务和构建聊天机器人。

我希望这些例子能激发您在AI和深度学习上做更多的事情。

https://www.codeproject.com/Articles/5282696/AI-Chatbots-With-TensorFlow-js-Generating-Shakespe

使用TensorFlow.js的AI聊天机器人六:生成莎士比亚独白相关推荐

  1. 使用TensorFlow.js的AI聊天机器人三:改进了文本中的情感检测

    目录 使用通用语句编码器设置TensorFlow.js代码 GoEmotion数据集 通用句子编码器 训练AI模型 让我们发现情绪 终点线 下一步是什么? 下载项目代码-9.9 MB TensorFl ...

  2. tensorflow循环神经网络(RNN)文本生成莎士比亚剧集

    tensorflow循环神经网络(RNN)文本生成莎士比亚剧集 我们将使用 Andrej Karpathy 在<循环神经网络不合理的有效性>一文中提供的莎士比亚作品数据集.给定此数据中的一 ...

  3. 使用TensorFlow.js的AI聊天机器人五:创建电影对话聊天机器人

    目录 设置UpTensorFlow.js代码 康奈尔电影报价数据集 通用句子编码器 电影聊天机器人在行动 终点线 下一步是什么? 下载项目文件-9.9 MB TensorFlow+JavaScript ...

  4. 使用TensorFlow.js的AI聊天机器人四:改进的Trivia Expert

    目录 使用通用语句编码器设置TensorFlow.js代码 TriviaQA数据集 通用句子编码器 聊天机器人在行动 终点线 下一步是什么? 下载项目代码-9.9 MB TensorFlow+Java ...

  5. 使用TensorFlow.js的AI聊天机器人二:训练Trivia Expert AI

    目录 设置TensorFlow.js代码 TriviaQA数据集 单词嵌入和标记 训练AI模型 聊天机器人(Trivia Chatbot)在行动 终点线 下一步是什么? 下载项目文件-9.9 MB T ...

  6. 使用TensorFlow.js的AI聊天机器人一:检测文本中的情绪

    目录 设置TensorFlow.js代码 GoEmotion数据集 言语包 训练AI模型 检测文本中的情绪 终点线 下一步是什么? 下载项目代码-9.9 MB TensorFlow + JavaScr ...

  7. 吟游诗人AI作新诗 堪称现代莎士比亚十

    2019独角兽企业重金招聘Python工程师标准>>> 近日,IBM研究人员公布了一款AI,并希望有一天这款AI能写出完美的莎士比亚十四行诗.为此,他们使用2600首十四行诗来训练新 ...

  8. 使用TensorFlow.js进行AI在网络摄像头中翻译手势和手语

    目录 起点 检测手势 其他手势和手语 技术脚注 终点线 下一步是什么? TensorFlow + JavaScript.现在,最流行,最先进的AI框架支持地球上使用最广泛的编程语言,因此,让我们在我们 ...

  9. ChatGPT提示词指令大全调教指南,6个网站让你轻松玩转AI聊天机器人!

    ChatGPT提示词大揭秘!6个网站让你轻松玩转AI聊天机器人! ChatGPT 的火热程度大家都看在眼里.很多人都想知道 : 要想用好 ChatGPT 需要什么 Prompt 提示词.提问模板 经常 ...

最新文章

  1. Linux网络服务_邮件服务器-Redhat Enterprise 5.9
  2. 怎么对 Java 程序调优?不看别后悔!
  3. 【学习·求职必备】入行深度学习之前,应该做好哪些准备
  4. java dct变换_Discrete Cosine Transform [DCT] (离散余弦变换)
  5. android studio 拉取分支,AndroidStudio中使用Git-高级篇(二)——新建分支(branch)和拉取请求(Pull request)...
  6. sql批量插入数据mysql_MYSQL批量插入数据库实现语句性能分析
  7. 开源 非开源_打破开源中的怪胎刻板印象
  8. 如何设计一道优雅的白名单策略
  9. 邮件怎发送HTML,请问怎么发送HTML电子邮件
  10. matlab求一元函数极值点和拐点,matlab求函数的极值点和拐点函数y=x^2*sin(x^2-爱问知识人...
  11. 油猴(Tampermonkey)插件+脚本+IDM=百度网盘高速下载
  12. 由动物启发的15个管理学定律
  13. 必要的先决条件安装失败_先决条件
  14. 一个简单的百度爬虫实例
  15. CSS学习笔记之练习 2.25
  16. 平方和立方和公式推导
  17. aspen变压吸附塔_ASPEN软件模拟在分离中的应用
  18. 二级域名的创建、简单配置域名解析
  19. 机票价格按照淡季、旺季,头等舱和经济舱收费,输入机票原价、月份和头等舱或者经济舱 旺季(5-10月) 头等舱9折,经济舱8.5折 淡季(11-4月) 头等舱7折,经济舱6.5折
  20. idea如何全局搜索关键字_IntelliJ 的搜索和全局搜索怎么用

热门文章

  1. webstorm 不识别.config文件_用TypeScript开发手势库 - (2)tsconfigamp; rollup.configamp;npx...
  2. android 动画后的位置,Android:Comp之后会重置动画位置
  3. 如何通过ssh登录linux,如何用SSH登录linux?
  4. java实现定时任务 schedule_详解java定时任务
  5. 支持专业设计师的高端样机素材网
  6. 年底设计师少不了礼品VIP活动设计,高端轻奢感尽显品味
  7. 适用电商BANNER的超酷炫抽象系几何时尚流行系列,PSD炫彩流体海报模板。
  8. 助力双十一,促销海报设计模板收好!
  9. sql的的over不能和group by一起使用吧_CellRouter的使用
  10. 【乐理知识】第二章 音符 休止符