自然语言处理(Natural Language Processing,NLP)解密

专栏集锦,大佬们可以收藏以备不时之需:

Spring Cloud 专栏:http://t.csdnimg.cn/WDmJ9

Python 专栏:http://t.csdnimg.cn/hMwPR

Redis 专栏:http://t.csdnimg.cn/Qq0Xc

TensorFlow 专栏:http://t.csdnimg.cn/SOien

Logback 专栏:http://t.csdnimg.cn/UejSC

量子计算:

量子计算 | 解密著名量子算法Shor算法和Grover算法

AI机器学习实战:

AI机器学习实战 | 使用 Python 和 scikit-learn 库进行情感分析

AI机器学习 | 基于librosa库和使用scikit-learn库中的分类器进行语音识别

Python实战:

Python实战 | 使用 Python 和 TensorFlow 构建卷积神经网络(CNN)进行人脸识别

Spring Cloud实战:

Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用

Spring Cloud 实战 | 解密Feign底层原理,包含实战源码

Spring Cloud 实战 | 解密负载均衡Ribbon底层原理,包含实战源码

1024程序员节特辑文章:

1024程序员狂欢节特辑 | ELK+ 协同过滤算法构建个性化推荐引擎,智能实现“千人千面”

1024程序员节特辑 | 解密Spring Cloud Hystrix熔断提高系统的可用性和容错能力

1024程序员节特辑 | ELK+ 用户画像构建个性化推荐引擎,智能实现“千人千面”

1024程序员节特辑 | OKR VS KPI谁更合适?

1024程序员节特辑 | Spring Boot实战 之 MongoDB分片或复制集操作

Spring实战系列文章:

Spring实战 | Spring AOP核心秘笈之葵花宝典

Spring实战 | Spring IOC不能说的秘密?

国庆中秋特辑系列文章:

国庆中秋特辑(八)Spring Boot项目如何使用JPA

国庆中秋特辑(七)Java软件工程师常见20道编程面试题

国庆中秋特辑(六)大学生常见30道宝藏编程面试题

国庆中秋特辑(五)MySQL如何性能调优?下篇

国庆中秋特辑(四)MySQL如何性能调优?上篇

国庆中秋特辑(三)使用生成对抗网络(GAN)生成具有节日氛围的画作,深度学习框架 TensorFlow 和 Keras 来实现

国庆中秋特辑(二)浪漫祝福方式 使用生成对抗网络(GAN)生成具有节日氛围的画作

国庆中秋特辑(一)浪漫祝福方式 用循环神经网络(RNN)或长短时记忆网络(LSTM)生成祝福诗词

在这里插入图片描述

自然语言处理(Natural Language Processing,NLP)是人工智能领域的一个重要分支,它涉及到使计算机能够理解、生成和处理人类语言的技术。NLP的应用范围非常广泛,包括文本分析、情感分析、机器翻译、语音识别等。

1、自然语言处理(NLP)的详细介绍:

1. 核心目标:
  • 使计算机能够理解人类语言:阅读、解析和理解文本数据。
  • 使计算机能够生成人类语言:撰写、生成自然语言文本。
2. 主要任务:
  • 词法分析(Tokenization):将文本拆分为单词或符号。
  • 词性标注(Part-of-Speech Tagging):识别每个单词的词性(名词、动词等)。
  • 句法分析(Parsing):确定单词之间的语法关系。
  • 语义分析(Semantic Analysis):理解单词和短语的意义。
  • 语义角色标注(Semantic Role Labeling):识别句子中动作或状态的执行者、接受者等。
  • 指代消解(Coreference Resolution):确定代词或指示词所指的具体对象。
  • 实体识别(Named Entity Recognition, NER):识别文本中的具体实体,如人名、地名、组织名。
  • 关系抽取(Relation Extraction):识别实体之间的关系。
  • 情感分析(Sentiment Analysis):确定文本的情感倾向。
  • 问答系统(Question Answering):回答用户提出的问题。
  • 机器翻译(Machine Translation):将一种语言的文本转换为另一种语言。
3. 适用场景:
  • 搜索引擎:提高搜索结果的相关性和准确性。
  • 推荐系统:基于用户评论和反馈生成个性化推荐。
  • 语音助手:如Siri、Alexa和Google Assistant等。
  • 聊天机器人:提供客户服务或娱乐交流。
  • 文本分析:如情感分析、趋势分析等。
  • 机器翻译:如Google Translate等。
  • 自动摘要:从长篇文章中提取主要内容。
  • 语音识别:将语音转换为文本。

2、自然语言处理(NLP)的发展历史:

1. 早期阶段(1950年代-1970年代):
  • 基于规则的方法:使用手工编写的规则来解析和理解文本。
  • 语义词典和知识库:构建包含单词意义和关系的词典。
2. 规则和统计方法相结合(1970年代-1990年代):
  • 采用统计方法来辅助规则系统,提高处理效率和准确性。
3. 语言模型和深度学习(1990年代-2000年代):
  • 基于规则的方法逐渐被基于统计的语言模型所取代。
  • 引入机器学习算法,如决策树、支持向量机等。
4. 神经网络的兴起(2008年-2019年):
  • 深度学习技术的引入,特别是循环神经网络(RNN)、长短时记忆网络(LSTM)和门控循环单元(GRU)。
  • 预训练语言模型,如Word2Vec、GloVe和BERT,这些模型能够从大量文本中学习到丰富的语言表示。
5. 大模型和多任务学习(2019年至今):
  • 模型大小和复杂性不断增加,出现了如GPT、T5等模型。
  • 多任务学习框架被广泛应用,使得模型能够同时学习多个任务,提高泛化能力。
    NLP的发展历史是不断进步和变革的,随着计算能力的提升和大数据的可用性,NLP技术已经取得了巨大的飞跃,成为现代人工智能技术的重要组成部分。

3、运用场景

  1. 搜索引擎:通过索引和检索文本数据,使用户能够快速找到相关信息。
  2. 机器翻译:将一种语言的文本自动翻译成另一种语言,如Google翻译。
  3. 情感分析:分析用户评论、社交媒体帖子等文本,以了解公众对某个产品、服务或事件的情感倾向。
  4. 语音识别:将语音转换为文本,如苹果的Siri和谷歌助手。
  5. 文本分类:将文本数据自动分类到预定义的类别中,如垃圾邮件检测。
  6. 命名实体识别:从文本中识别出具有特定意义的实体,如人名、地名、组织机构名等。
  7. 问答系统:回答用户提出的问题,如IBM的沃森。
  8. 自动摘要:从长篇文章中提取出摘要,使读者能够快速了解文章的主要内容。
  9. 推荐系统:根据用户的阅读、观看或购买历史,推荐相关的文章、视频或商品。

常用NLP库和框架

  1. NLTK(Natural Language Toolkit):这是一个用于处理文本数据的综合性Python库。
  2. TextBlob:这是一个用于处理文本数据的简单Python库,它提供了情感分析的功能。
  3. spaCy:这是一个用于处理文本的Python库,它提供了高性能的NLP模型和工具。
  4. TensorFlow:这是一个流行的深度学习框架,可以用于构建复杂的机器学习模型,包括机器翻译模型。
  5. PyTorch:这是另一个流行的深度学习框架,也可以用于构建复杂的机器学习模型。

4、案例和代码

1、NLP技术在搜索引擎中的应用

通常涉及以下几个步骤:索引创建、查询解析、查询优化、结果生成和排名。下面是一个简化的例子,展示了这些步骤的基本实现:

import re
from collections import defaultdict
# 索引创建
class InvertedIndex:def __init__(self):self.index = defaultdict(list)def add_document(self, doc_id, content):words = re.findall(r'\w+', content.lower())for word in words:self.index[word].append(doc_id)def search(self, query):words = re.findall(r'\w+', query.lower())doc_ids = set()for word in words:if word in self.index:doc_ids.update(self.index[word])return list(doc_ids)
# 创建索引
index = InvertedIndex()
documents = [("Natural language processing is a subfield of artificial intelligence.", "doc1"),("Text analysis and processing are key components of NLP.", "doc2"),("Machine translation is an application of NLP.", "doc3")
]
for content, doc_id in documents:index.add_document(doc_id, content)
# 查询解析
def parse_query(query):# 这里可以添加更复杂的查询解析逻辑return query.split()
# 执行搜索
query = "NLP applications"
parsed_query = parse_query(query)
results = index.search(" ".join(parsed_query))
print(f"Results for query '{query}': {results}")

在这个例子中,我们创建了一个简单的倒排索引,并添加了一些文档。然后,我们定义了一个查询解析函数,它将查询字符串分解为单词列表。最后,我们使用倒排索引来搜索匹配查询的文档。
请注意,这个例子非常简化,实际的搜索引擎系统会更加复杂,可能包括词干提取、同义词处理、语法分析、深度学习模型等高级技术。此外,排名算法(如PageRank、BM25等)也会被用于确定搜索结果的顺序。

2、机器翻译

机器翻译是自然语言处理(NLP)的一个热门应用领域,它使用算法将一种语言的文本自动翻译成另一种语言。以下是一个简单的机器翻译示例,使用Python的googletrans库:
首先,您需要安装googletrans库,可以使用pip进行安装:

pip install googletrans==4.0.0-rc1

请注意,googletrans库是一个第三方库,它使用了Google翻译的API。在编写本回答时,googletrans的最新版本是4.0.0-rc1,但随着时间的推移,可能会有新的版本发布。
以下是一个简单的Python代码示例,展示了如何使用googletrans库进行英译汉:

from googletrans import Translator
translator = Translator()
# 翻译文本
translated_text = translator.translate('Natural language processing is a subfield of artificial intelligence.', dest='zh-cn').text
print(translated_text)

在这段代码中,我们首先创建了一个Translator对象,然后调用它的translate方法来翻译文本。dest参数指定了目标语言,'zh-cn'表示简体中文。
googletrans库还提供了其他有用的方法,例如detect,可以检测文本的自然语言,以及get_candidates,可以获取翻译建议的列表。
请注意,googletrans库的使用可能受到Google翻译API的使用条款和限制。如果您需要处理大量的翻译任务,可能需要注册Google Cloud并使用相应的API密钥来访问服务。
对于更复杂的机器翻译任务,您可以考虑使用深度学习框架,如TensorFlow或PyTorch,以及预训练的机器翻译模型。这些框架允许您构建和训练自己的翻译模型,但它们的实现更为复杂,需要一定的机器学习和编程知识。

3、情感分析

情感分析是自然语言处理(NLP)中的一个重要应用,它涉及识别和分类文本中的情感倾向,如正面、负面或中性。以下是一个简单的情感分析示例,使用Python的TextBlob库:
首先,您需要安装TextBlob库,可以使用pip进行安装:

pip install textblob

然后,您需要下载TextBlob的数据包,可以使用以下命令:

pip install textblob[polarity]

以下是一个简单的Python代码示例,展示了如何使用TextBlob库进行情感分析:

from textblob import TextBlob
# 创建TextBlob对象
blob = TextBlob("Natural language processing is a fascinating field.")
# 获取情感极性
sentiment = blob.sentiment
# 打印情感极性和强度
print(f"Polarity: {sentiment.polarity}")
print(f"Subjectivity: {sentiment.subjectivity}")
# 根据极性判断情感
if sentiment.polarity > 0:print("Positive sentiment")
elif sentiment.polarity < 0:print("Negative sentiment")
else:print("Neutral sentiment")

在这段代码中,我们首先创建了一个TextBlob对象,然后获取了它的情感极性。sentiment.polarity是一个浮点数,表示情感的极性,正值表示正面情感,负值表示负面情感,零表示中性情感。sentiment.subjectivity表示文本的主观性程度。
根据极性的值,我们判断了情感的类型,并打印了出来。
请注意,TextBlob是一个简化的情感分析工具,它适用于大多数基本任务,但对于更复杂的情感分析任务,可能需要使用更高级的模型和技术,如基于深度学习的模型。

4、语音识别

当涉及到NLP和语音识别时,通常使用的编程语言是Python。Python中有很多库可以用于语音识别,其中比较受欢迎的是Google的TensorFlow和Facebook的PyTorch。在本教程中,我们将使用TensorFlow的SpeechBrain库来进行语音识别。
SpeechBrain是一个开源的语音处理研究库,它提供了一个简单易用的API来构建语音处理系统。它支持多种任务,包括语音识别、说话人识别、语音合成等。
要安装SpeechBrain,请运行以下命令:

pip install SpeechBrain

以下是一个简单的示例,演示如何使用SpeechBrain进行语音识别:

import torch
from speechbrain import braindecode
from speechbrain.dataio.dataloader import FileLoader
from speechbrain.dataio.audio import Audio
from torch.utils.data import DataLoader
# 设置设备
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# 加载数据
file_loader = FileLoader(filename="path/to/your/audio/file.wav")
audio = Audio(loader=file_loader)
# 创建数据加载器
dataloader = DataLoader(dataset=audio, batch_size=1, shuffle=False)
# 加载预训练模型
model = braindecode.models.CRNN(input_size=1024,hidden_size=512,num_layers=2,output_size=29,  # 音频词汇表大小dropout_rate=0.5,
)
model.to(device)
# 加载权重
model.load_state_dict(torch.load("path/to/your/model.pth"))
# 设置为评估模式
model.eval()
# 进行语音识别
with torch.no_grad():for batch in dataloader:features = batch["audio_signal"].to(device)logits = model(features)predicted_text = braindecode.utils.decode_predictions(logits, dataset=" LibriSpeech")print(predicted_text)

在上面的代码中,我们首先设置了设备,然后加载了音频数据并创建了数据加载器。

5、文本分类

文本分类是自然语言处理(NLP)中的一个重要任务,可以使用机器学习算法对文本进行分类。以下是一个简单的文本分类示例,使用Python中的scikit-learn库和TensorFlow。
首先,安装所需的库:

pip install numpy scikit-learn tensorflow

接下来,我们将使用scikit-learn库中的TfidfVectorizer将文本数据转换为TF-IDF特征向量,并使用TensorFlow构建一个简单的文本分类模型。

import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.utils import to_categorical
# 加载数据集
data = pd.read_csv("data.csv")
texts = data["text"].tolist()
labels = data["label"].tolist()
# 将标签转换为独热编码
labels = to_categorical(labels)
# 将数据集分为训练集和测试集
train_texts, test_texts, train_labels, test_labels = train_test_split(texts, labels, test_size=0.2, random_state=42)
# 使用TF-IDF特征向量转换训练集和测试集
vectorizer = TfidfVectorizer()
train_features = vectorizer.fit_transform(train_texts)
test_features = vectorizer.transform(test_texts)
# 构建TensorFlow模型
model = Sequential()
model.add(Dense(64, activation="relu", input_shape=(train_features.shape[1],)))
model.add(Dense(32, activation="relu"))
model.add(Dense(len(labels[0]), activation="softmax"))
# 编译模型
model.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
# 训练模型
model.fit(train_features, train_labels, epochs=10, batch_size=32)
# 评估模型
predictions = model.predict(test_features)
predictions = np.argmax(predictions, axis=1)
accuracy = accuracy_score(test_labels, predictions)
print("Accuracy:", accuracy)

这个示例中,我们首先加载数据集,然后将数据集分为训练集和测试集。接着使用TF-IDF特征向量转换训练集和测试集,并使用TensorFlow构建一个简单的文本分类模型。最后,我们训练模型并评估其准确性。
注意,这个示例只是一个简单的文本分类模型,实际应用中可能需要更多的数据和更复杂的模型,以及调优超参数来提高性能。

6、命名实体识别(NER)

抱歉,上一条回答中的代码片段不完整。下面是一个完整的示例,展示如何使用AllenNLP库实现命名实体识别(NER)任务:
首先,确保你已经安装了AllenNLP

pip install allennlp

然后,你可以使用以下代码来定义一个简单的NER模型:

from allennlp.models.architectures.crf_complex import CRFComplex
from allennlp.data.tokenizers import Token
from allennlp.data.fields import TextField, LabelField
from allennlp.data import DatasetReader, DataLoader
from allennlp.models import Model
from allennlp.nn.util import get_text_field_mask
# 定义数据读取器
reader = DatasetReader()
# 定义文本和标签字段
def tokenize_and_tag(text):tokens = [Token(word) for word in text.split()]return TextField(tokens, token_indexers={"tokens": SingleIdTokenIndexer()})
# 定义标签列表
label_list = ["O", "B-PER", "I-PER", "B-LOC", "I-LOC", "B-ORG", "I-ORG", "B-TIME", "I-TIME"]
# 加载数据集
dataset = reader.read("path_to_your_data.txt", tokenize_and_tag, label_list=label_list)
# 定义模型
class NERModel(Model):def __init__(self, vocab):super().__init__(vocab)# 定义文本嵌入层self.text_field_embedder = ...# 定义其他层self.ner_classifier = CRFComplex(num_tags=len(vocab["labels"]),# 定义其他参数)def forward(self, tokens, tags=None):# 获取文本嵌入表示text_embedder_output = self.text_field_embedder(tokens)# 获取掩码mask = get_text_field_mask(tokens)# 进行前向传播logits = self.ner_classifier(text_embedder_output, mask)# 如果有标签,计算损失if tags is not None:# 使用CRF损失函数loss = self.ner_classifier._compute_loss(logits, tags, mask)return lossreturn logits
# 实例化模型
model = NERModel(vocab)
# 定义优化器
optimizer = ...
# 训练模型
for epoch in range(num_epochs):for batch in dataloader:# 获取输入数据tokens = batch["tokens"]tags = batch["tags"]# 梯度清零optimizer.zero_grad()# 计算损失loss = model(tokens, tags)# 反向传播loss.backward()# 更新参数optimizer.step()

在这个示例中,我们首先定义了一个数据读取器,它负责从文本文件中读取数据并将其转换为AllenNLP可以处理的形式。然后,我们定义了一个NER模型,它使用条件随机场(CRF)来预测句子中的实体标签。模型向前传播时,它会计算文本的嵌入表示,然后通过CRF层来预测标签。
请注意,这个代码只是一个框架,你需要根据你的数据和任务来填充具体的实现细节,例如文本嵌入层、数据加载器的定义等。此外,你需要准备训练数据和验证数据,并使用AllenNLP的DataLoader来迭代训练过程。

7、问答系统

构建一个完整的NLP问答系统是一个复杂的任务,通常涉及到自然语言理解(NLU)和自然语言生成(NLG)等多个方面。在这个简化的例子中,我们将使用一个预训练的模型来回答问题,但请注意,这个系统非常基础,不适合实际应用。
我们将使用Python和Hugging Face的Transformers库来实现一个简单的问答系统。这个库提供了一些预训练的模型,我们可以直接使用它们来回答问题。
首先,安装所需的库:

pip install transformers

然后,我们可以编写代码来加载预训练的模型并回答问题:

from transformers import pipeline
# 加载一个预训练的模型,这里我们使用一个简单的问答模型
# 在实际应用中,你可能需要使用更复杂的模型,比如BERT或GPT
qa_model = pipeline("question-answering")
# 这里是一些问题和答案的示例
train_data = [{"question": "Who wrote the play Hamlet?", "context": "Hamlet is a play written by William Shakespeare.", "answer": "William Shakespeare"},{"question": "What is the capital of France?", "context": "The capital of France is Paris.", "answer": "Paris"},
]
# 使用训练数据来微调模型(如果你有自己的数据集)
# qa_model.fit(train_data)
# 现在我们可以使用模型来回答问题
def ask_question(question, context=None):# 如果提供了上下文,我们将其传递给模型if context:result = qa_model(question, context)else:result = qa_model(question)# 提取答案answer = result[0]['answer']confidence = result[0]['score']print(f"Question: {question}")print(f"Answer: {answer} (confidence: {confidence:.2f})")
#  ask_question("Who wrote the play Hamlet?")
#  ask_question("What is the capital of France?")
#  ask_question("What is the population of London?", context=["London is the capital city of the United Kingdom.", "The population of London is estimated to be about 9 million."])
# 注意:上面的ask_question函数中的context参数是一个列表,其中包含用于回答问题的上下文文本。

在这个例子中,我们使用了Hugging Face的Transformers库中的pipeline函数来创建一个问答管道。这个管道使用了预训练的模型来处理问题。如果你有自己的数据集,你可以使用fit函数来微调模型,以便更好地适应你的数据。
请注意,这个示例非常基础,实际的问答系统会更加复杂,可能需要使用更高级的模型和更多的数据来训练。此外,问答系统还需要能够处理各种类型的问题,包括事实性问题、推理问题、解释性问题等。

8、自动摘要

自然语言处理(NLP)中的自动摘要是一项挑战,因为它需要理解文本的含义并提取关键信息。以下是一个简单的自动摘要示例,使用Python的Gensim库来实现。
首先,你需要安装Gensim和必要的依赖项。你可以使用pip来安装:

pip install gensim

然后,你可以使用以下代码来实现自动摘要:

import gensim
from gensim.summarization import summarize
# 定义文本
text = """
NLP自动摘要是一个将长文本转换为简洁摘要的过程。在自然语言处理领域,这是一个具有挑战性的任务,因为它需要理解文本的含义并提取关键信息。有许多不同的方法可以实现自动摘要,包括提取式摘要和生成式摘要。
提取式摘要方法通过识别文本中的关键句子或段落来生成摘要。这些关键句子或段落通常是通过一些特定的指标来选择的,例如重要性、频率或位置。生成式摘要方法则通过理解文本的含义和结构来生成新的摘要,通常需要更复杂的模型和算法。
在实际应用中,自动摘要可以用于许多不同的场景,例如新闻报道、学术文章或社交媒体。它可以帮助用户快速了解文本的主要内容,节省时间和精力。
总之,NLP自动摘要是一个重要的研究领域,它可以为用户提供更好的文本理解和处理能力。
"""
# 使用Gensim的summarize函数进行自动摘要
summary = summarize(text, word_count=100)
# 打印摘要
print(summary)

这个例子使用了Gensim库的summarize函数来实现自动摘要。你可以通过调整word_count参数来控制摘要的长度。
请注意,这只是一个简单的示例,实际应用中可能需要更复杂的模型和算法来生成更准确和自然的摘要。

9、推荐系统

在自然语言处理(NLP)中,推荐系统通常使用文本分析和机器学习技术来分析用户和项目的特征,从而为用户推荐他们可能感兴趣的项目。以下是一个简单的NLP推荐系统的示例,它使用TF-IDF和协同过滤技术。
首先,你需要安装必要的库。你可以使用pip来安装:

pip install gensim
pip install scikit-learn

然后,你可以使用以下代码来实现一个简单的NLP推荐系统:

import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.neighbors import NearestNeighbors
# 示例数据集
movies = ['The Lord of the Rings: The Fellowship of the Ring','The Lord of the Rings: The Two Towers','The Lord of the Rings: The Return of the King','The Matrix','The Matrix Reloaded','The Matrix Revolutions','Harry Potter and the Sorcerer\'s Stone','Harry Potter and the Chamber of Secrets','Harry Potter and the Prisoner of Azkaban',
]
# 用户评分
user_ratings = {'Alice': {'The Lord of the Rings: The Fellowship of the Ring': 4.0,'The Lord of the Rings: The Two Towers': 4.5,'The Lord of the Rings: The Return of the King': 5.0,'The Matrix': 3.0,'The Matrix Reloaded': 3.5,'The Matrix Revolutions': 4.0,'Harry Potter and the Sorcerer\'s Stone': 4.0,'Harry Potter and the Chamber of Secrets': 4.5,'Harry Potter and the Prisoner of Azkaban': 5.0,},'Bob': {'The Lord of the Rings: The Fellowship of the Ring': 5.0,'The Lord of the Rings: The Two Towers': 4.0,'The Lord of the Rings: The Return of the King': 4.5,'The Matrix': 2.0,'The Matrix Reloaded': 2.5,'The Matrix Revolutions': 3.0,'Harry Potter and the Sorcerer\'s Stone': 3.0,'Harry Potter and the Chamber of Secrets': 3.5,'Harry Potter and the Prisoner of Azkaban': 4.0,},
}
# 将电影名称转换为电影ID
movie_id = {movie: i for i, movie in enumerate(movies)}
# 创建TF-IDF向量化器
vectorizer = TfidfVectorizer()
# 为电影标题创建TF-IDF向量
movie_tfidf = vectorizer.fit_transform(movies)
# 计算用户对电影的评分矩阵
user_ratings_matrix = np.zeros((len(movie_id), len(user_ratings)))
for i, movie in enumerate(movies):for user, rating in user_ratings.items():if movie in rating:user_ratings_matrix[i][movie_id[movie]] = rating[movie]
# 使用K近邻算法找到最相似的用户
neighbors = NearestNeighbors(n_neighbors=3)
neighbors.fit(user_ratings_matrix)
# 推荐电影给新用户
new_user_ratings = {'Charlie': {'The Matrix': 4.0,'The Matrix Reloaded': 4.5,}
}
new_user_matrix = np.zeros((len(movie_id), len(new_user_ratings)))
for i, movie in enumerate(movies):for user, rating in new_user_ratings.items():if movie in rating:new_user_matrix[i][movie_id[movie]] = rating[movie]
# 为新用户推荐电影
distances, indices = neighbors.kneighbors(new_user_matrix)# 根据相似度排名,为新用户推荐电影
recommended_movies = [movies[i] for i in indices[0]]print("Recommended movies for Charlie:")
for movie in recommended_movies:print(movie)

这段代码使用K近邻算法找到与新用户’Charlie’最相似的用户,并根据相似度排名为新用户推荐电影。在实际应用中,你可能需要考虑更多的用户和电影数据,以及更复杂的推荐算法,例如矩阵分解(如协同过滤)或深度学习方法。
请注意,这个示例是一个简化的版本,仅用于演示目的。在实际应用中,你可能需要处理更复杂的用户行为数据和电影内容数据,以及可能出现的冷启动问题(即新用户或新项目的推荐)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/636426.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Servlet中service()与doGet() doPost() 是什么关系

Servlet&#xff08;Server Applet&#xff09;&#xff0c;全称Java Servlet。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据&#xff0c;生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口&#xff0c;广义的Servlet是指任何实现了这个Servlet…

关于去除信号中的直流分量效果演示(零频率分量)

本文作者&#xff1a; slience_me 文章目录 关于去除信号中的直流分量效果演示&#xff08;零频率分量&#xff09;1. 效果图展示&#xff1a;2. 快速傅里叶变换FFT3. 相关验证代码 关于去除信号中的直流分量效果演示&#xff08;零频率分量&#xff09; 1. 效果图展示&#x…

JDK 动态代理(Spring AOP 的原理)(面试重点)

代理模式 也叫委托模式.定义&#xff1a;为其他对象提供⼀种代理以控制对这个对象的访问.它的作⽤就是通过提供⼀个代理类,让我们 在调⽤⽬标⽅法的时候,不再是直接对⽬标⽅法进⾏调⽤,⽽是通过代理类间接调⽤&#xff0c;在某些情况下,⼀个对象不适合或者不能直接引⽤另⼀个对…

51单片机蜂鸣器

蜂鸣器 蜂鸣器的工作原理 三极管的工作原理 三极管是一种半导体器件&#xff0c;通常由三个掺杂不同的半导体材料层构成。它常用于放大和开关电路中。三极管的工作原理可简述如下&#xff1a; 放大作用&#xff1a;三极管可以放大电流和电压信号。它的工作原理基于控制一个较大…

Web前端与低代码可以碰出什么火花?

技术快速迭代&#xff0c;Web前端开发已经逐渐成为构建现代应用程序的关键组成部分。它不仅涉及到美观的界面设计&#xff0c;还包括后端功能的实现&#xff0c;以及跨平台兼容性的考虑。然而&#xff0c;传统的Web前端开发过程往往需要进行长时间的编码和调试&#xff0c;这使…

LTC6820和isoSPI使用

1、MSTR主控/受控 MSTR (引脚 11/ 引脚 12)&#xff1a;串行接口主 / 从选择器输入。MSTR接VCC&#xff0c;则LTC6820为从机&#xff1b;MSTR接GND&#xff0c;则LTC6820为主机 2、SLOW慢速/快速 SLOW (引脚 12/ 引脚 13)&#xff1a;慢速接口选择输入。当时钟频率≤ 200kHz …

C++和Python最常用的库框架一览

一、C常用库 1. 标准模板库(STL) STL包含丰富的数据结构与算法。比如vector动态数组;list双向链表;map基于红黑树实现,支持快速查找键值对。常用算法有sort排序、find搜索等。这些容器算法类和函数模板,是C程序员必不可少的基础。 2. Boost Boost是近年兴起的高质量C库集合…

网络安全:守护数字世界的盾牌

在当今数字化的时代&#xff0c;网络已经渗透到我们生活的方方面面。从社交媒体到在线银行&#xff0c;从在线购物到工作文件传输&#xff0c;网络几乎无处不在。然而&#xff0c;随着网络的普及&#xff0c;网络安全问题也日益凸显。那么&#xff0c;如何确保我们的数字资产安…

递归、搜索与回溯算法(专题一:递归)

往期文章&#xff08;希望小伙伴们在看这篇文章之前&#xff0c;看一下往期文章&#xff09; &#xff08;1&#xff09;递归、搜索与回溯算法&#xff08;专题零&#xff1a;解释回溯算法中涉及到的名词&#xff09;【回溯算法入门必看】-CSDN博客 接下来我会用几道题&#…

Docker-安装实践(mysql,redis集群,tomcat)

docker实践(提供几个安装案例&#xff09; 安装Tomcat # 拉取镜像,可以指定标签不指定默认为最新 docker pull tomcat docker run -itd -p 8080:8080 --name tomcat tomcat:latest #这样内部默认80端口&#xff0c;主机的映射端口会随机分配一个 docker run -itd -P tomcat…

Python-基础篇-数据结构-列表、元组、字典、集合

文章目录 思维导图❓ 大抵是何物数据结构切片 &#x1f4ac;具体是何物列表&#x1f4bb; list&#x1f4bb; [ ]自我介绍精神面貌使用说明生理体征增删查改 方法汇总 元组&#x1f4bb; tuple&#x1f4bb; ( )自我介绍使用说明精神面貌生理体征增删查改 字典&#x1f4bb; di…

【C++】vector容器接口要点的补充

接口缩容 在VS编译器的模式下&#xff0c;类似于erase和insert接口的函数通常会进行缩容&#xff0c;因此&#xff0c;insert和erase行参中的迭代器可能会失效。下图中以erase为例&#xff1a; 代码如下&#xff1a; #include <iostream> #include <vector> #inclu…

Python——条形图正负不同色加表格

条形图&#xff0c;当差值大于0时设置一个颜色&#xff0c;反之另一种颜色&#xff0c;并添加表格 import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib.ticker as mtick import matplotlib.ticker as ticker#设置输出结果对齐方式 pd…

Qt 5.15.2 (MSVC 2019)编译 QWT 6.2.0 : 编译MingW或MSVC遇到的坑

MingW下编译QWt 6.2.0 下载qwt最新版本&#xff0c;用git工具 git clone下载源码 git clone https://git.code.sf.net/p/qwt/git qwt-git 或者使用我下载的 qwt 2.6.0 链接&#xff1a;https://pan.baidu.com/s/1KZI-L10N90TJobeqqPYBqw?pwdpq1o 提取码&#xff1a;pq1o 下载…

python-基础篇-高级变量类型

文章目录 高级变量类型目标知识点回顾 01. 列表1.1 列表的定义1.2 列表常用操作del 关键字&#xff08;科普&#xff09;关键字、函数和方法&#xff08;科普&#xff09; 1.3 循环遍历1.4 **应用场景** 02. 元组2.1 元组的定义创建空元组元组中 **只包含一个元素** 时&#xf…

教您如何下载保存钉钉视频到电脑本地

教您如何下载保存钉钉视频到电脑和手机相册地瓜网络技术 大家好&#xff0c;我们这边是地瓜网络技术&#xff01;30秒教会你下载钉钉视频&#xff01;现在很多群管理员把视频设置为禁止下载&#xff0c;导致我们无法正常的下载群直播回放视频&#xff0c; 今天我们就教大家如何…

AWS 专题学习 P7 (FSx、SQS、SNS)

文章目录 Amazon FSx – 概述Amazon FSx for LustreFSx Lustre - 文件系统部署选项 Amazon FSx for NetApp ONTAPAmazon FSx for OpenZFSHybrid Cloud 存储AWS 存储云原生选项AWS 存储网关Amazon S3 File GatewayAmazon FSx File GatewayVolume GatewayTape GatewayStorage Gat…

【LeetCode】141. 环形链表

leetcode题目链接 141. 环形链表 #include <stdio.h> #include <stdbool.h>struct ListNode {int val;struct ListNode* next; }; typedef struct ListNode ListNode;bool hasCycle(ListNode* head) {ListNode* slow head, * fast head;while (fast &&…

微信小程序 image bindload 事件不触发,图片加载不出来

问题&#xff1a; 当小程序图片页面反复跳转时&#xff0c;或者微信打开小程序页面之后&#xff0c;处于后台运行。 图片加载不出来&#xff0c;我图片加载是通过bindload事件不判断是否下载完成再显示。但是现在bindload不触发&#xff0c;一直显示加载层。 分析&#xff1…

鸿蒙 HarmonyOS ArkTS ArkUI 动画 中心扩展、向下扩展、纵向扩展

EntryComponentstruct Index {State widthA: number 0State heightA: number 0onPageShow():void{animateTo ( {duration: 2000,iterations: -1,curve:Curve.Linear}, () > {this.widthA 200this.heightA 200} )}build() {Column() {// 中心扩展Column(){}.width(this.wi…