自然语言处理(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 loss
        return 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’最相似的用户,并根据相似度排名为新用户推荐电影。在实际应用中,你可能需要考虑更多的用户和电影数据,以及更复杂的推荐算法,例如矩阵分解(如协同过滤)或深度学习方法。
请注意,这个示例是一个简化的版本,仅用于演示目的。在实际应用中,你可能需要处理更复杂的用户行为数据和电影内容数据,以及可能出现的冷启动问题(即新用户或新项目的推荐)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多维表格产品vika多维表、Flowus、Wolai体验记录

昨天从下午6点肝到凌晨2点多体验低代码平台多维表格产品&#xff0c;体验了3个国内产品&#xff0c;vika多维表、Flowus、Wolai。 具有多维表格新型关系数据库的鼻祖是 Airtable&#xff0c;国内模仿产品有vika多维表、飞书多维表格等。 还有一种类型就是以在国内鼎鼎大名的N…

流式湖仓增强,Hologres + Flink构建企业级实时数仓

云布道师 2023 年 12 月&#xff0c;由阿里云主办的实时计算闭门会在北京举行&#xff0c;阿里云实时数仓Hologres 研发负责人姜伟华现场分享 HologresFlink 构建的企业级实时数仓&#xff0c;实现全链路的数据实时计算、实时写入、实时更新、实时查询。同时&#xff0c;随着流…

实验七 RMAN恢复管理器

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

Python笔记10-数据可视化练习折线图

文章目录 JSON数据Python数据和Json数据的相互转化pyecharts模块构建折线图全局配置绘制疫情数据折线图 JSON数据 JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据 。本质上是一个带有特定格式的字符串 主要功能&#xff1a;可以在各个编程语言中流通…

JumpServer 堡垒机安装指南

介绍 什么是JumpServer JumpServer 是广受欢迎的开源堡垒机&#xff0c;是符合 4A 规范的专业运维安全审计系统。JumpServer 帮助企业以更安全的方式管控和登录所有类型的资产&#xff0c;包括&#xff1a; SSH (Linux / Unix / 网络设备 等)Windows (Web 方式连接 / 原生 R…

Wpf 使用 Prism 实战开发Day13

配置 AutoMapper 关系映射 在上一节 ToDoController 控制器&#xff0c;或 IToDoService 服务接口中&#xff0c;方法的传参都是直接传的实体类。但在实际开发过程中&#xff0c;这样是不允许的。标准且规范的做法是&#xff0c;定义一个数据传输层&#xff0c;即Dto层。 一.在…

forEach如何跳出或中断循环

文章目录 概要使用try...catch抛出错误设置数组长度为0使用splice删除数组的元素 概要 在Javascript中&#xff0c;我们使用forEach遍历循环的时候&#xff0c;往往会面临跳出循环和中断循环&#xff0c;我们可以采取以下几种方式&#xff1a; 使用try…catch抛出错误 const …

智能音箱喇叭杂音问题

智能音箱喇叭杂音问题 智能音箱生厂或出货过程会遇到多种喇叭播放有杂音的问题&#xff0e; 螺丝不匹配 智能音箱设备在生产过程&#xff0c;会有SPL测试喇叭失真&#xff0c;发现不良率8%的杂音问题&#xff0e; 分析原因是来料导入了新螺丝&#xff0c; 使用过程进入异物…

GO 中如何防止 goroutine 泄露

文章目录 概述如何监控泄露一个简单的例子泄露情况分类chanel 引起的泄露发送不接收接收不发送nil channel真实的场景 传统同步机制MutexWaitGroup 总结参考资料 今天来简单谈谈&#xff0c;Go 如何防止 goroutine 泄露。 概述 Go 的并发模型与其他语言不同&#xff0c;虽说它…

配置redis挂载

1. 暂停和删除redis 2.创建文件夹 /usr/local/software/redis/6379/conf/ /usr/local/software/redis/6379/data/ 把redis-conf文件上传到conf文件夹中 3.配置网络 docker network create --driver bridge --subnet172.18.12.0/16 --gateway172.18.1.1 wn_docker_net 4.运…

FaFu--练习复盘--1

1、输出图形及二维数组应用 1.1.输出图形 描述 编写程序打印n行如下图形&#xff0c;其中1≤n≤500。 输入用例 7 输出用例 具体实现 #include"stdio.h" int main(){int n,i,j;scanf("%d",&n);for(i 1; i< n;…

如何将PDF文件转换为Word格式?推荐PDF转换工具

pdf转word格式可以帮助我们对文档的格式进行调整和排版&#xff0c;有时候&#xff0c;pdd文件的排版可能不符合我们的需求&#xff0c;或者需要进行一些样式和布局的调整。通过将PDF转word&#xff0c;我们可以轻松地修改字体、样式、段落间距等&#xff0c;使文档符合我们的要…

logstack 日志技术栈-02-ELK 的缺点?loki 更轻量的解决方案?

ELK/EFK日志系统 如果今天谈论到要部署一套日志系统&#xff0c;相信用户首先会想到的就是经典的ELK架构&#xff0c;或者现在被称为Elastic Stack。 Elastic Stack架构为Elasticsearch Logstash Kibana Beats的组合&#xff0c;其中&#xff0c;Beats负责日志的采集&…

【kali后续配置】Kali Linux 换源更新及配置SSH服务一文通(一键换源脚本)

在前面&#xff0c;我们已经下载并安装了Kali Linux 2023版本&#xff0c;因为一些事情的耽误&#xff0c;后面的一些操作教程没有发出来&#xff0c;今天给大家补上。 Kali Linux安装 前置准备&#xff1a; VMware安装kali Linux 镜像下载 kali源 官方源 deb http://htt…

构建高效外卖系统:技术实践与代码示例

外卖系统在现代社会中扮演着重要的角色&#xff0c;为用户提供了便捷的用餐解决方案。在这篇文章中&#xff0c;我们将探讨构建高效外卖系统的技术实践&#xff0c;同时提供一些基础的代码示例&#xff0c;帮助开发者更好地理解和应用这些技术。 1. 技术栈选择 构建外卖系统…

基于CNN卷积神经网络的minst数据库手写字识别

一、理论基础 卷积神经网络&#xff08;Convolutional Neural Networks, CNN&#xff09;是一类包含卷积计算且具有深度结构的前馈神经网络&#xff08;Feedforward Neural Networks&#xff09;&#xff0c;是深度学习&#xff08;deep learning&#xff09;的代表算法之一。…

【数据结构】常见八大排序算法总结

目录 前言 1.直接插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 6.1Hoare版本 6.2挖坑法 6.3前后指针法 6.4快速排序的递归实现 6.5快速排序的非递归实现 7.归并排序 8.计数排序&#xff08;非比较排序&#xff09; 9.补充:基数排序 10.总结…

Web3解密:区块链技术如何颠覆传统互联网

随着区块链技术的崛起&#xff0c;Web3正逐渐成为新一代互联网的代名词。它不再依赖中心化的权威机构&#xff0c;而是通过去中心化、透明、安全的特性&#xff0c;为用户带来更为开放和公正的互联网体验。本文将深入解密Web3&#xff0c;揭示区块链技术如何颠覆传统互联网的基…

新品发布 | 多通道总线记录仪TLog1004,是你期待的吗?

新品发布 2024年1月12日&#xff0c;同星智能又发布一款多通道 CAN &#xff08;FD&#xff09;总线、LIN 总线接口logger设备&#xff0c;此款产品在TLog1002基础上进行了升级&#xff0c;同时内置 3 路数字输入和 2 路数字输出&#xff0c;便于多种信号测量和系统集成。可以满…

Python + Selenium —— 网页元素定位之Xpath定位!

前面讲的定位方式&#xff0c;都能够很方便的定位到网页元素。但是这些属性并非所有的网页元素都具备&#xff0c;可以这么说&#xff0c;绝大部分情况下都很难保证元素具备这些属性。 也就是很多时候需要使用其他的方式来定位&#xff0c;在 WebDriver 中提供了 Xpath 和 Css…