使用TensorFlow.js的AI聊天机器人六:生成莎士比亚独白
目录
设置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聊天机器人六:生成莎士比亚独白相关推荐
- 使用TensorFlow.js的AI聊天机器人三:改进了文本中的情感检测
目录 使用通用语句编码器设置TensorFlow.js代码 GoEmotion数据集 通用句子编码器 训练AI模型 让我们发现情绪 终点线 下一步是什么? 下载项目代码-9.9 MB TensorFl ...
- tensorflow循环神经网络(RNN)文本生成莎士比亚剧集
tensorflow循环神经网络(RNN)文本生成莎士比亚剧集 我们将使用 Andrej Karpathy 在<循环神经网络不合理的有效性>一文中提供的莎士比亚作品数据集.给定此数据中的一 ...
- 使用TensorFlow.js的AI聊天机器人五:创建电影对话聊天机器人
目录 设置UpTensorFlow.js代码 康奈尔电影报价数据集 通用句子编码器 电影聊天机器人在行动 终点线 下一步是什么? 下载项目文件-9.9 MB TensorFlow+JavaScript ...
- 使用TensorFlow.js的AI聊天机器人四:改进的Trivia Expert
目录 使用通用语句编码器设置TensorFlow.js代码 TriviaQA数据集 通用句子编码器 聊天机器人在行动 终点线 下一步是什么? 下载项目代码-9.9 MB TensorFlow+Java ...
- 使用TensorFlow.js的AI聊天机器人二:训练Trivia Expert AI
目录 设置TensorFlow.js代码 TriviaQA数据集 单词嵌入和标记 训练AI模型 聊天机器人(Trivia Chatbot)在行动 终点线 下一步是什么? 下载项目文件-9.9 MB T ...
- 使用TensorFlow.js的AI聊天机器人一:检测文本中的情绪
目录 设置TensorFlow.js代码 GoEmotion数据集 言语包 训练AI模型 检测文本中的情绪 终点线 下一步是什么? 下载项目代码-9.9 MB TensorFlow + JavaScr ...
- 吟游诗人AI作新诗 堪称现代莎士比亚十
2019独角兽企业重金招聘Python工程师标准>>> 近日,IBM研究人员公布了一款AI,并希望有一天这款AI能写出完美的莎士比亚十四行诗.为此,他们使用2600首十四行诗来训练新 ...
- 使用TensorFlow.js进行AI在网络摄像头中翻译手势和手语
目录 起点 检测手势 其他手势和手语 技术脚注 终点线 下一步是什么? TensorFlow + JavaScript.现在,最流行,最先进的AI框架支持地球上使用最广泛的编程语言,因此,让我们在我们 ...
- ChatGPT提示词指令大全调教指南,6个网站让你轻松玩转AI聊天机器人!
ChatGPT提示词大揭秘!6个网站让你轻松玩转AI聊天机器人! ChatGPT 的火热程度大家都看在眼里.很多人都想知道 : 要想用好 ChatGPT 需要什么 Prompt 提示词.提问模板 经常 ...
最新文章
- Linux网络服务_邮件服务器-Redhat Enterprise 5.9
- 怎么对 Java 程序调优?不看别后悔!
- 【学习·求职必备】入行深度学习之前,应该做好哪些准备
- java dct变换_Discrete Cosine Transform [DCT] (离散余弦变换)
- android studio 拉取分支,AndroidStudio中使用Git-高级篇(二)——新建分支(branch)和拉取请求(Pull request)...
- sql批量插入数据mysql_MYSQL批量插入数据库实现语句性能分析
- 开源 非开源_打破开源中的怪胎刻板印象
- 如何设计一道优雅的白名单策略
- 邮件怎发送HTML,请问怎么发送HTML电子邮件
- matlab求一元函数极值点和拐点,matlab求函数的极值点和拐点函数y=x^2*sin(x^2-爱问知识人...
- 油猴(Tampermonkey)插件+脚本+IDM=百度网盘高速下载
- 由动物启发的15个管理学定律
- 必要的先决条件安装失败_先决条件
- 一个简单的百度爬虫实例
- CSS学习笔记之练习 2.25
- 平方和立方和公式推导
- aspen变压吸附塔_ASPEN软件模拟在分离中的应用
- 二级域名的创建、简单配置域名解析
- 机票价格按照淡季、旺季,头等舱和经济舱收费,输入机票原价、月份和头等舱或者经济舱 旺季(5-10月) 头等舱9折,经济舱8.5折 淡季(11-4月) 头等舱7折,经济舱6.5折
- idea如何全局搜索关键字_IntelliJ 的搜索和全局搜索怎么用
热门文章
- webstorm 不识别.config文件_用TypeScript开发手势库 - (2)tsconfigamp; rollup.configamp;npx...
- android 动画后的位置,Android:Comp之后会重置动画位置
- 如何通过ssh登录linux,如何用SSH登录linux?
- java实现定时任务 schedule_详解java定时任务
- 支持专业设计师的高端样机素材网
- 年底设计师少不了礼品VIP活动设计,高端轻奢感尽显品味
- 适用电商BANNER的超酷炫抽象系几何时尚流行系列,PSD炫彩流体海报模板。
- 助力双十一,促销海报设计模板收好!
- sql的的over不能和group by一起使用吧_CellRouter的使用
- 【乐理知识】第二章 音符 休止符