本文主要同大家分享word2vec原理以及应用,通过文本相似度和新闻文本分类为案例进行展开,最后对词向量技术发展进行简述。
作者:走在前方
博客:https://wenjie.blog.csdn.net/
学习交流群:更多精彩内容加入“NLP技术交流群” 学习
专注于文本分类、关键词抽取、文本摘要、FAQ 问答系统、对话系统语义理解 NLU、知识图谱等研究和实践。结合工业界具体案例和学术界最新研究成果实现 NLP 技术场景落地。

本次分享主要内容

  • 词向量以及相关应用介绍
    • NLP常见的任务
    • 词离散化表示和分布式表示
    • 词相似性分析以及词嵌入可视化
  • 词向量知识理论介绍
    • NNLM模型和word2vec 模型
    • fastText 词向量以及文本分类原理
  • pytorch 工具构建word2vec 模型
    • 词向量的概念
    • 用 skip-gram 模型训练词向量
    • PyTorch dataset 和 dataloader
    • 定义 PyTorch 模型
    • 学习 torch.nn 中常见的 Module
      • Embedding
    • 学习常见的 PyTorch operations
      • bmm
      • logsigmoid
    • 保存和读取 PyTorch 模型
  • gensim 工具构建word2vec 模型
    • 数据分词处理
    • 词向量模型训练以及性能功能验证
    • 相似性服务演示以及数据可视化
    • word2vec 词向量可视化
  • 案例分享
    • 新闻相似推荐
    • 新闻文本分类
  • 展望未来:词向量技术拓展
    • 词向量历史发展(word2vec-> ElMo->GPT-> BERT…)
    • 不同词向量对比分析

词向量及相关应用

NLP 常见任务

  • 自动摘要
  • 指代消解
  • 机器翻译
  • 词性标注
  • 分词
  • 主题识别
  • 文本分类
  • 。。。。

词离散表示

  • One-hot 表示
  • Bag of Words
  • Bi-gram 和 N-gram
  • 离散表示面临的问题

One-hot 表示

  • 语料库

John likes to watch movies. Mary likes too.

John also likes to watch football games.

  • 词典

{“John”: 1, “likes”: 2, “to”: 3, “watch”: 4, “movies”: 5, “also”: 6, “football”: 7, “games”: 8, “Mary”: 9, “too”: 10}

  • One-hot 表示

john: [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]

likes: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]

。。。。

too : [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]

表示方法: 词典包含 10 个单词,每个单词有唯一索引

面临的问题:词典中的顺序和在句子中的顺序没有关联

Bag of Words

  • 文档的向量表示可以直接将各词的词向量表示加和

John likes to watch movies. Mary likes too.

John also likes to watch football games.

分别表示成下面的格式,体现每个单词出现的次数

[1, 2, 1, 1, 1, 0, 0, 0, 1, 1]

[1, 1, 1, 1, 0, 1, 1, 1, 0, 0]

  • 词权重
    • TF-IDF (Term Frequency - Inverse Document Frequency)

词 t 的 IDF weight,N: 文档总数,nt: 含有词 t 的文档数

图片

[0.693, 1.386, 0.693, 0.693, 1.099, 0, 0, 0, 0.693, 0.693]

  • Binary weighting

短文本相似性,Bernoulli Naive Bayes

[1, 1, 1, 1, 1, 0, 0, 0, 1, 1]

Bi-gram 和 N-gram

bi-gram 建索引(2-gram):

"John likes”: 1,

"likes to”: 2,

"to watch”: 3,

"watch movies”: 4,

"Mary likes”: 5,

"likes too”: 6,

"John also”: 7,

"also likes”: 8,

“watch football”: 9,

“football games”: 10,

该方法的优缺点如下

优点:考虑了词的顺序

缺点:词表的膨胀

离散表示面临的问题

  • 无法衡量词向量之间的关系(太稀疏,很难捕捉文本的含义)

酒店 [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]

宾馆 [0, 0, 0, 0, 1, 0, 0, 0, 0, 0]

旅舍 [0, 0, 0, 0, 0, 0, 0, 0, 1, 0]

  • 词表维度随着语料库增长膨胀
  • n-gram 词序列随语料库膨胀更快
  • 数据稀疏问题

那么有没有一种方法解决上述主要问题呢?

答案: 分布式词嵌入 distribution word embedding

分布式词表示

用一个词附近的其他词来表示该词

“You shall know a word by the company it keeps” (J. R. Firth 1957: 11)

现代统计自然语言处理中最有创见的想法之一。

图片

banking 附近的词将会代表 banking 的含义

词的相似性

  • 单词最近相似词列表

the closest words to the target word frog:

  1. frog
  2. frogs
  3. toad
  4. litoria
  5. leptodactylidae
  6. rana
  7. lizard
  8. eleutherodactylus

图片

上述资料:

GloVe: Global Vectors for Word Representation

https://nlp.stanford.edu/projects/glove/

https://nlp.stanford.edu/pubs/glove.pdf

  • 词之间相似度比较分析

P(solid | ice) 相对较高

P(solid | steam) 相对较低

图片

词嵌入可视化

男-女

图片

公司-CEO

图片

城市-邮政编码

图片

比较级-最高级

图片

英语-西班牙语

图片

词向量知识理论介绍

NNLM (Neural Network Language model)

网络语言模型是词向量是嵌入技术的一种,将非数值的单词嵌入到向量空间中去. 该模型属于预测语言模型, 即通过完成一个预测任务,如根据一部分文本或单词预测与其相关联的单词,训练的过程中得到单词的向量表达形式.

NNLM 结构

http://www.jmlr.org/papers/volume3/bengio03a/bengio03a.pdf

https://mycourses.aalto.fi/pluginfile.php/634164/mod_resource/content/4/nnlm%2Bend2018.pdf

图片

图片

  • (N-1)个前向词:one-hot 表示
  • 采用线性映射将 one-hot 表 示投影到稠密 D 维表示(词典维数 V,稠密词向量表示维数 D)
  • 输出层:Softmax
  • 各层权重最优化:BP+SGD

NNLM 计算复杂度

图片

每个训练样本的计算复杂度:N * D + N * D * H + H * V

一个简单模型在大数据量上的表现比复杂模型在少数据量上的表现会好

Word2Vec 模型

https://arxiv.org/pdf/1309.4168v1.pdf

图片

Word2Vec Skip-Gram 模型

https://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf

图片

Skip-gram 模型架构,训练的目标学习一个词向量表示,根据当前词获取周围的相关词。

  • 无隐层
  • 投影层也可省略
  • 每个词向量作为 log-linear 模型的输入

目标函数:

图片

W(t) : 中心词

C: 上下文词

  • 概率密度由 Softmax 给出

图片

Skip-Gram 负例采样:Negative sampling 训练的目标

图片

logsimoid(中心词,周围词)

logsimoid(中心词,负采样的词),针对每个周围词采用采样 k 个词

Word2Vec 存在的问题

  • 每个 local context window 单独训练,没有利用包含在 global co-currence 矩阵中的统计信息
  • 对多义词无法很好的表示和处理,因为使用了唯一 的词向量

word2vec 之 PyTorch 实现

研究主要内容

  • 词向量的概念
  • 用 skip-gram 模型训练词向量
  • PyTorch dataset 和 dataloader
  • 定义 PyTorch 模型
  • 学习 torch.nn 中常见的 Module
    • Embedding
  • 学习常见的 PyTorch operations
    • bmm
    • logsigmoid
  • 保存和读取 PyTorch 模型

我们采用 wiki 一小部分数据,来演示 pytorch 如何训练 word-embedding.

《word-embedding.ipynb》通过本部分,我们重点了解如何通过 pytorch 来实现一个 word2vec,不对实际的效果进行进行详细的调整。

图片

gensim 工具实现词向量模型

  • 原始语料数据: 中文维基 wiki.zh.simp.txt 大概 1.2G 的数据. 40 万+篇文章
  • 原始数据分词:wiki.zh.simp.txt -> wiki.zh.simp.seg.txt 我们构建了 1.5G 的数据。40 万篇文章
  • 模型效果评估
  • 词性服务在线部署

语料分词处理

#!/usr/bin/env python
# -*- coding: utf-8  -*-
# 逐行读取文件数据进行 jieba 分词
import jieba
import codecs
if __name__ == '__main__':input_data = 'data/wiki.zh.simp.txt'output_data = 'data/wiki.zh.simp.seg.txt'f = codecs.open(input_data, 'r', encoding='utf8')target = codecs.open(output_data, 'w', encoding='utf8')print('open files.')lineNum = 1line = f.readline()while line:line = line.strip()print('---processing ', lineNum, ' article---')seg_list = jieba.cut(line, cut_all=False)line_seg = ' '.join(seg_list)target.write(line_seg + "\n")lineNum = lineNum + 1line = f.readline()print('well done.')f.close()target.close()

词向量模型训练

#!/usr/bin/env python
# -*- coding: utf-8  -*-
# 使用 gensim word2vec 训练脚本获取词向量
import logging
import os.path
import sys
import multiprocessing
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
if __name__ == '__main__':program = os.path.basename(sys.argv[0])logger = logging.getLogger(program)logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s', level=logging.INFO)logger.info("running %s" % ' '.join(sys.argv))# inp 为输入语料, outp1 为输出模型, outp2 word2vec 的 vector 格式的模型fdir = 'wiki_zh_vec/'inp = '../data/wiki.zh.simp.seg.txt'outp1 = fdir + 'wiki.zh.text.model'outp2 = fdir + 'wiki.zh.text.vector'# 训练 skip-gram 模型model = Word2Vec(LineSentence(inp), size=100, window=5, min_count=5, workers=multiprocessing.cpu_count())# 保存模型model.save(outp1)model.wv.save_word2vec_format(outp2, binary=False)

最终生成两个重要的文件

  • 向量模型 wiki_zh_vec/wiki.zh.text.model
  • 模型对应的词向量 wiki_zh_vec/wiki.zh.text.vector

执行训练代码:python train_word_vector.py

注意: 考虑数据量比较大,如果大家电脑资源有限,可以考虑数据变小一些,然后尝试进行训练,我的电脑内存 8G 的。每个一次迭代将近 10 分钟,故:也可以减少迭代次数来尝试训练。

图片

图片

词相似性功能效果测试

# 测试训练好的模型
import gensim
if __name__ == '__main__':fdir = 'wiki_zh_vec/'model = gensim.models.Word2Vec.load(fdir + 'wiki.zh.text.model')word = model.wv.most_similar(u"北京大学")result = []for t in word:print(t[0], t[1])result.append("{}|{}".format(t[0], t[1]))print("\n".join(result))

最终的结果: 输入每个单词和相似度得分,感觉很不错哦
清华大学 0.9125707745552063

武汉大学 0.8931570053100586

燕京大学 0.8854908347129822

上海大学 0.8746916651725769

复旦大学 0.8719724416732788

中国人民大学 0.8659096956253052

浙江大学 0.8627960085868835

南开大学 0.8615208268165588

北洋大学 0.8545465469360352

词相似性在线服务

为方便访问,我们提供一个专门的服务,这样可以实时获取某个单词的相似词列表

import gensim
from flask import Flask, request
app = Flask(__name__)
fdir = 'wiki_zh_vec/'
model = gensim.models.Word2Vec.load(fdir + 'wiki.zh.text.model')
@app.route('/api/v1.0/sim', methods=['get'])
def predict():result = []query = request.args.get('query')word = model.wv.most_similar(u"{}".format(query), topn=20)for t in word:result.append("{}|{}<br/>".format(t[0], t[1]))data = "\n".join(result)print(data)return data
if __name__ == '__main__':app.run(host='0.0.0.0')

第一步: 启动在线服务

python api.py

第二步:在线服务预测

图片

fastText,最终我们生成需要标准化的文件。

例如:custom_cosine_simialrity.json,我们的数据格式

标准数据生成

图片

图片

数据标准格式举例

图片

词向量可视化

custom_cosine_simialrity.json 拷贝到项目工作下即可

图片

服务启动:python -m http.server 8081,启动成功后可以通过浏览器访问了 http://127.0.0.1:8081/

图片

应用案例分析

新闻相似推荐

目标: 获取文本相似的文本列表

query document socre

query doc1

query doc2

query doc3

query doc4

实现方案步骤:

  • 新闻库数据: 来自爬虫 ,这里我们获取 20000 篇 新闻 标题 作为新闻基础库( 小预料数据)
  • 基于基础数据训练 word2vec 模型
  • 新闻基础库 向量化处理
  • 根据用户访问的单个新闻标题 从基础库获取相似新闻 topN

新闻基础库

为方便理解,我们模拟一批新闻 news_data.txt: 新闻 ID 制表符 新闻标题

举例说明:

0 龙山华府将推出 86-140 平米灵动空间

1 朱骏给毛剑卿洗脑一小时 小毛:看守所里有我球迷

2 广东商品房销售均价达到 6392 元平方米

新闻基础库向量化

新闻-> 爬虫-> 调用词向量模型-> 每篇新闻向量化结果-> 数据库存储(mongodb,hdfs)

这里假设数据存储一个文本中。

news_data.txt-> news_data_vector.bin

文本相似性计算

对于新闻来说,对时效性要求非常高。一般用户点击标题后对比的基础库有限的。我们这里每次从提供的 所有新闻列表进行检索,计算相似度得分。

图片

文本相似度扩展方案,更多数据大家也可以去爬取,可以尝试使用 1G 左右数据,效果基本上可以使用了。

如果准备运用到线上系统,这里提供大家一些优化方案

  • 训练的数据增加是必须的,重点 数据
  • word2vec 模型定期基于当前的数据进行增量训练
  • 分词部分大家可以考虑使用 jieba 这种进行分词
  • 可以使用一些预训练好的开源模型,在此基础上进行增量训练
  • 关于词向量大家也可以使用(Elmo,BERT 等,效果很好)
  • 目前我们仅使用标题,实际工作我们需要结合标题和内容同时进行训练和预测

新闻文本分类

学习目标

  • fastText 简介
  • fastText 结构
  • fastText 文本分类实战
    • 数据分析和可视化
    • 文本分类模型训练以及参数调优
    • 文本分类模型压缩
    • 分类模型效果评估
    • 模型预测

fastText 介绍

fasttext 是 facebook 开源的一个词向量与文本分类工具,在学术上没有太多创新点,好处是模型简单,训练速度非常快。简单尝试可以发现,用起来还是非常顺手的,做出来的结果也不错,可以达到上线使用的标准。

简单说来,fastText 做的事情,就是把文档中所有词通过 lookup table 变成向量,取平均之后直接用线性分类器得到分类结果。论文指出了对一些简单的分类任务,没有必要使用太复杂的网络结构就可以取得差不多的结果。

fastText 是一个快速文本分类算法,与基于神经网络的分类算法相比有两大优点:

  • fastText 在保持高精度的情况下加快了训练速度和测试速度
  • fastText 不需要预训练好的词向量,fastText 会自己训练词向量
  • fastText 两个重要的优化:Hierarchical Softmax、N-gram

fastText 结构

fastText 模型架构和 word2vec 中的 CBOW 很相似, 不同之处是 fastText 预测标签而 CBOW 预测的是中间词,即模型架构类似但是模型的任务不同。

  • 回顾 word2vec

word2vec 将上下文关系转化为多分类任务,进而训练逻辑回归模型,这里的类别数量|V|词库大小。通常的文本数据中,词库少则数万,多则百万,在训练中直接训练多分类逻辑回归并不现实。word2vec 中提供了两种针对大规模多分类问题的优化手段,negative sampling 和 hierarchical softmax。在优化中,negative sampling 只更新少量负面类,从而减轻了计算量。hierarchical softmax 将词库表示成前缀树,从树根到叶子的路径可以表示为一系列二分类器,一次多分类计算的复杂度从|V|降低到了树的高度

  • fastText 结构

x1,x2,…,xN−1,xN表示一个文本中的n-gram向量,每个特征是词向量的平均值。这和前文中提到的cbow相似,cbow用上下文去预测中心词,而此处用全部的n-gram去预测指定类别。

图片

fastText 论文中提到了两个 tricks

  • hierarchical softmax
    • 类别数较多时,通过构建一个霍夫曼编码树来加速 softmax layer 的计算,和之前 word2vec 中的 trick 相同
  • N-gram features
    • 只用 unigram 的话会丢掉 word order 信息,所以通过加入 N-gram features 进行补充用 hashing 来减少 N-gram 的存储

fastText 文本分类

图片

数据处理

图片

训练效果评估和模型压缩

图片

文本分类效果评估

图片

文本分类在线预测

图片

具体内容可以参考《fasttext 文本分类》

拓展:NLP 领域词向量发展

更多资料参考博客: https://blog.csdn.net/shenfuli/article/details/106337940

图片

文本表示和词向量对比

下面对文本表示进行一个归纳,对于一篇文本可以如何用数学语言表示呢?

  • 基于 one-hot、tf-idf、textrank 等的 bag-of-words;
  • 主题模型:LSA(SVD)、pLSA、LDA;
  • 基于词向量的固定表征:Word2vec、FastText、GloVe
  • 基于词向量的动态表征:ELMo、GPT、BERT

各种词向量的特点

  • One-hot 表示 :维度灾难、语义鸿沟;
  • 分布式表示 (distributed representation) :
    • 矩阵分解(LSA):利用全局语料特征,但 SVD 求解计算复杂度大;
    • 基于 NNLM/RNNLM 的词向量:词向量为副产物,存在效率不高等问题;
    • Word2vec、FastText:优化效率高,但是基于局部语料;
    • GloVe:基于全局预料,结合了 LSA 和 Word2vec 的优点;
    • ELMo、GPT、BERT:动态特征

Word2vec 和 NNLM 对比

  • 本质都可以看作是语言模型;
  • 词向量只不过 NNLM 一个产物,Word2vec 虽然其本质也是语言模型,但是其专注于词向量本身,因此做了许多优化来提高计算效率:
    • 与 NNLM 相比,词向量直接 sum,不再拼接,并舍弃隐层;
    • 考虑到 sofmax 归一化需要遍历整个词汇表,采用 hierarchical softmax 和 negative sampling 进行优化,hierarchical softmax 实质上生成一颗带权路径最小的哈夫曼树,让高频词搜索路劲变小;negative sampling 更为直接,实质上对每一个样本中每一个词都进行负例采样;

Word2vec 和 FastText 对比

  • 都是无监督学习词向量,FastText 训练词向量时会考虑 subword;
  • FastText 还可以进行有监督学习进行文本分类,其主要特点:
    • 结构与 CBOW 类似,但学习目标是人工标注的分类结果;
    • 采用 hierarchical softmax 对输出的分类标签建立哈夫曼树,样本中标签多的类别被分配短的搜寻路径;
    • 引入 N-gram,考虑词序特征;
    • 引入 subword 来处理长词,处理未登陆词问题;

Word2vec** 和 GloVe 对比**

  • Word2vec 是局部语料库训练的,其特征提取是基于滑窗的;而 GloVe 的滑窗是为了构建 co-occurance matrix,是基于全局语料的,可见 GloVe 需要事先统计共现概率;因此,Word2vec 可以进行在线学习,GloVe 则需要统计固定语料信息。
  • Word2vec 是无监督学习,同样由于不需要人工标注;GloVe 通常被认为是无监督学习,但实际上 GloVe 还是有 label 的,即共现次数 。
  • Word2vec 损失函数实质上是带权重的交叉熵,权重固定;GloVe 的损失函数是最小平方损失函数,权重可以做映射变换。

总体来看,GloVe 可以被看作是更换了目标函数和权重函数的全局 Word2vec

ELMo、GPT、BERT 对比

它们都是基于语言模型的动态词向量。下面从几个方面对这三者进行对比:

  • 特征提取器
    • ELMo 采用 LSTM 进行提取,GPT 和 BERT 则采用 Transformer 进行提取。
    • Transformer 特征提取能力强于 LSTM,ELMo 采用 1 层静态向量 +2 层 LSTM,多层提取能力有限,而 GPT 和 BERT 中的 Transformer 可采用多层,并行计算能力强。
  • 单 / 双向语言模型
    • GPT 采用单向语言模型,ELMo 和 BERT 采用双向语言模型。但是 ELMo 实际上是两个单向语言模型(方向相反)的拼接,这种融合特征的能力比 BERT 一体化融合特征方式弱。
    • GPT 和 BERT 都采用 Transformer,Transformer 是 encoder-decoder 结构,GPT 的单向语言模型采用 decoder 部分,decoder 的部分见到的都是不完整的句子;BERT 的双向语言模型则采用 encoder 部分,采用了完整句子。
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 利用AI Studio,分析《安家》评论

    《安家》是一部讲述房产中介的电视剧,剧中房产中介公司叫做“安家天下”,其中有两个店长,在剧情设定方面,我们就知道,这中间肯定会发生一些有趣的故事。因此使用Python爬取了豆瓣《安家》下所有的评论,进行了数据分析,从观众的角度来了解这部电视剧。在本案例中,主要分…...

    2024/4/27 15:45:39
  2. python--urlopen函数 urlretrieve函数

    request模块--urlopen函数、urlretrieve函数一.urlopen函数1.说明2.注意点3.示例urlretrieve函数1.说明示例 一.urlopen函数 1.说明 创建一个表示远程url的类文件对象,然后操作这个类文件对象来获取远程数据 2.注意点 1.url:是请求的url 2.data:请求如果加上data值,就会将g…...

    2024/4/29 5:23:16
  3. JVM相关知识(个人学习笔记)

    GC的基础知识 1.什么是垃圾C语言申请内存:malloc free C++: new delete c/C++ 手动回收内存 Java: new ? 自动内存回收,编程上简单,系统不容易出错,手动释放内存,容易出两种类型的问题:忘记回收 多次回收没有任何引用指向的一个对象或者多个对象(循环引用) 2.如何定位…...

    2024/4/26 17:10:25
  4. Flutter 与 RN对比

    Flutter是什么现在技术更新迭代真的很快,每隔几年就会出现一些新的技术。当然,Flutter出现有有一点时间了,只不过还未真是发布,但是已经有一些人在使用了。这篇文章主要内容来自我在公司内部的一次分享会,所以大部分内容都是提炼。Flutter 是由 Google 的工程师团队打造的…...

    2024/5/1 16:31:32
  5. CBS财富森望博伦直播间林森望诱导炒指数亏损能追回吗?

    CBS财富平台正规合法吗?CBS财富平台老师喊单导致严重亏损?林森望、朱俊闵带单德指、指数、股指能盈利吗?炒外汇黄金、期货原油、A50、沪深300,China300等指数被骗亏损资金能追回吗?黑平台老师喊单造成的亏损能追回吗?平台不能出金怎么办?大部分投资者初期抱着盈利目的进…...

    2024/4/29 2:22:46
  6. 阿里云ACP考试学习过程分享

    考证意义 证多不压身,证比项目经历更具有说服力,证是行业的标准认证。更多时候,是有证的人说,“证其实不重要”。 ACP考试偏简单,考试费用1000元(官网1200元),相对于很多国际认证,性价比高。 阿里云认证,对于以后从事任何行业都是有益的,即使是传统企业也有趋势上云…...

    2024/5/1 21:17:03
  7. 全球网络的三个边界

    1.IP编址与地理分布-物理与逻辑的边界 IP路由的效率和路由器以及主机的地理分布关系重大,地理分布零散带来的后果就是路由表的庞大,因为在这个无线核心网络还远未实现的时期,网络的本质就是一根根的线缆连接着的一台台的设备,同时在这个总线型架构早已被淘汰的年代,一根线…...

    2024/4/13 2:05:01
  8. ThreadLoacl的内存泄露问题

    线上有问题的时候,虽然每行日志都打印了流水号,但是请求存在重试的情况,这样想筛选出单一请求的日志比较麻烦,于是想使用SLF4j的MDC,MDC实际上就是一个ThreadLoacl,但是同事实现的日志trace中,没有进行MDC.remove(),我认为这样会存在内存泄漏,但是同事说,我每次对同一…...

    2024/4/25 7:45:51
  9. 如何设计一个秒杀系统(一)

    目录秒杀的业务逻辑秒杀的代码逻辑基于事务的秒杀悲观锁解决多线程并发事务问题秒杀的业务逻辑首先看数据库有两张表,一张订单表,一张库存表。库存表中的count字段代表“一开始一共有多少库存”、sale字段代表“已售了多少” 、version用来记录“乐观锁的版本号”再来看业务“…...

    2024/4/23 17:27:03
  10. 目标检测最新综述

    一.目标检测的定义 目标检测是计算机视觉领域基础研究,对于计算机视觉中其它的任务通常会依赖于目标检测任务的结果进行后续的处理,比如目标跟踪等。 目标检测是在图片中对数目是可变的目标进行分类和定位。对于目标检测而言,可能存在一些问题: (1)可能存在多个不同类的目…...

    2024/5/2 6:51:58
  11. Docker安装Jenkins教程

    一、安装使用docker拉取镜像 jenkins/jenkins ,不要使用jenkinsci/blueocean镜像,该镜像存在依赖问题。拉取时可选择版本 lts长期支持版或latest最新版,默认为latest sudo docker pull jenkins/jenkins运行该镜像# 以下指令详细解释请参考官网 sudo docker run \-u root \--r…...

    2024/5/1 13:02:19
  12. Fontconfig error: failed reading config file解决

    我使用imshow,就会报错Fontconfig error: failed reading config file,之前还是好好的,想到我今天更新了opencv,所以把opencv回退个版本就没有问题了...

    2024/4/23 22:13:54
  13. 什么是好代码

    个人觉得好的代码应该具有如下几个特征:明确性,代码功能需要单一明确。可读性,代码不是写给自己一个人看的。简洁性,代码需要简洁,减少不必要的冗余,冗余的代码实际也是另一种变相的消耗性能。效率性,使代码运行速度快。维护性,容易修改升级。...

    2024/4/29 5:23:10
  14. springcloud+nacos服务发现设置namespace

    一般开发都会有多套环境,如果多套环境公用一个nacos,那么配置中心和注册中心都会发生冲突,所以需要用namespace隔离开address: 0.0.0.0port: 8083servlet:# 这里设置了context-pathcontext-path: /settlement/v1spring:application:name: settlementcloud:nacos:config:serv…...

    2024/5/1 19:14:42
  15. Java设计模式-深入了解

    Java设计模式-深入了解一、单例模式应用场景:该模式最常见的用法就是统计用户访问人数(因此当系统中只需要一个实例对象或者系统中只允许一个公共访问点,除了这个公共访问点外,不能通过其他访问点访问该实例时,可以使用单例模式)。实现方式原理:某个类的实例对象只有一个,…...

    2024/4/30 3:50:03
  16. Python 求补码

    # # 由十进制得到二进制补码 # 系统会先将 -10 转成补码,然后直接与后面的二进制进行与操作 # 就得到 -10 的补码了 # str = "{:b}".format(-10 & 0b1111111111111111) print(str)输出: 1111111111110110...

    2024/4/20 5:11:45
  17. Mysql服务无法启动,服务没有产生任何错误问题解决

    Mysql服务无法启动,服务没有产生任何问题 产生这个问题最有可能的原因是3306这个端口号被占用。 解决方法: WIN+R打开命令盘,输入netstat -aon|findstr “3306”,查看3306端口被什么占用。记住占用3306端口的id号(最后的几个数字,例如11348)。进入任务管理器,打开详细界…...

    2024/4/23 23:42:26
  18. SSH

    ## Port ssh -p 4567 apollo@example.com## keep alive ssh -o ServerAliveInterval=600 lake@47.100.203.63## Tunnel 9902 at server Remote side ssh -R 9902:10.213.2.104:22 lake@47.100.203.63...

    2024/4/28 11:19:24
  19. JS时间

    JS时间日期输出 默认情况下,会使用浏览器的时区并将日期显示为全文本字符串: var d = new Date();输出为: Mon Jul 13 2020 16:01:13 GMT+0800 (中国标准时间)创建Date对象 由Date()构造函数创建。 有四种方法创建新的日期对象:new Date() new Date(year,month,day,…...

    2024/4/20 5:23:10
  20. 文件下载文件名乱码

    背景 在做文件下载的过程中,发现原来的做法是直接给response.getOutputStream()中,写文件输入流的。并且在响应头中添加了content-disposition响应头来告诉浏览器下载文件名。但是这里冒出中文乱码问题。 旧的做法 response.setHeader("content-disposition","…...

    2024/4/21 13:08:16

最新文章

  1. NLP 笔记:TF-IDF

    TF-IDF&#xff08;Term Frequency-Inverse Document Frequency&#xff0c;词频-逆文档频率&#xff09;是一种用于信息检索和文本挖掘的统计方法&#xff0c;用来评估一个词在一组文档中的重要性。TF-IDF的基本思想是&#xff0c;如果某个词在一篇文档中出现频率高&#xff0…...

    2024/5/2 9:56:43
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. axios拦截器:每次请求自动带上 token

    Step 1&#xff1a;创建Axios实例并添加拦截器 在你的Vue项目中&#xff0c;一般我们会先导入axios&#xff0c;然后创建一个axios实例。这样做是为了方便统一管理和配置。 import axios from axios; // 引入axios// 创建一个axios实例 const service axios.create();// 添加请…...

    2024/4/30 17:13:59
  4. LeetCode-46. 全排列【数组 回溯】

    LeetCode-46. 全排列【数组 回溯】 题目描述&#xff1a;解题思路一&#xff1a;回溯。回溯三部曲解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案…...

    2024/5/1 5:12:19
  5. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/1 10:25:26
  6. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/1 13:20:04
  7. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/1 21:18:12
  8. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/2 9:47:31
  9. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/2 9:47:31
  10. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/2 6:03:07
  11. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/2 9:47:30
  12. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/1 11:24:00
  13. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/2 5:31:39
  14. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/1 20:22:59
  15. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/2 9:47:28
  16. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/2 9:47:27
  17. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/2 0:07:22
  18. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/2 8:37:00
  19. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/2 9:47:26
  20. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/2 9:47:25
  21. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/1 14:33:22
  22. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/1 11:51:23
  23. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/2 7:30:11
  24. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/1 20:56:20
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57