中文NLP
中文分词
在谣言监测任务中,分词策略的选择需要结合任务特点和模型类型。以下是针对不同场景的推荐方案:
1. 基于规则/传统机器学习的方法
推荐:词语级分词
• 工具示例:
• jieba(中文分词)
• LTP(哈工大分词工具)
• HanLP(支持多任务)
• 优势:
• 保留完整词语的语义(如"疫苗"、"副作用"等关键词可直接作为特征)
• 适合与TF-IDF、TextRank等传统特征提取方法结合
• 适用场景:
• 基于关键词匹配的快速过滤
• 小规模数据集上的分类模型(如SVM、随机森林)
2. 基于深度学习/预训练模型的方法
推荐:子词切分(Subword Tokenization)
• 工具示例:
• BERT Tokenizer(WordPiece)
• GPT Tokenizer(BPE)
• SentencePiece(通用子词切分)
• 优势:
• 解决未登录词问题(如新造词"奥密克戎"会被自动拆分为子词)
• 兼容多语言混合文本(如中英文混杂的社交媒体内容)
• 更适合Transform ...
Multi Agent Reinforcement Learning
多智能体强化学习怎么入门? - 兽族机枪兵的回答 - 知乎
计组简答题107题
冯.诺依曼主要三个思想是什么?(3分)
答:
①采用二进制
②存储程序和数据
③硬件有五大部分:输入设备、输出设备、存储器、运算器和控制器
计算机硬件由哪5部分组成?(5分)
答:输入设备、输出设备、存储器、运算器和控制器。
VLSI中文的意思是什么?(2分)
答:超大规模集成电路(VLSI,Very Large Scale Integration)
列举出三个计算机应用领域?(3分)
答:①科学技术计算 ②数据信息处理 ③计算机控制 ④计算机辅助技术 ⑤家庭电脑化
计算机系统分哪两大系统?(2分)
答:硬件系统、软件系统
计算机内部信息包括哪两大信息?(2分)
答:
①控制信息,即操作命令,其发源地为控制器
②数据流,它受控制信息的控制,从一部件流向另一部件,边流动边加工处理、
计算机性能主要包括哪三个主要性能?(3分)
答:
①基本字长:参与运算的数的基本长度,用二进制数位的长短来衡量,取决寄存器、加法器、数据总线等部件的位数。
②主存容量:可以用字节,有的用字长,K、M、G、T。
③运算速度:是每秒能执行的指令条数来表示,单位是条/ ...
Linux使用技巧
Linux: 后台运行进程
在 Linux 中,将当前进程放到后台运行并确保在关闭终端后仍持续运行,可以通过以下步骤实现:
方法 1:使用 nohup + &(推荐)
启动时直接后台运行
在命令前加 nohup,末尾加 &:
nohup your_command > output.log 2>&1 &
• nohup:忽略挂断信号(SIGHUP),防止终端关闭时进程被终止。
• > output.log:将标准输出重定向到文件(默认会输出到 nohup.out)。
• 2>&1:将错误输出合并到标准输出。
• &:让进程在后台运行。
查看后台进程
jobs -l # 查看当前终端的后台任务ps aux | grep your_command # 全局查找进程
关闭终端后仍运行
进程会脱离当前终端,由 init 进程(PID=1)接管,即使关闭终端也不会终止。
方法 2:使用 disown(针对已运行的进程)
如果进程已在前台运行:
按 Ctrl + Z 暂停进 ...
C++ Practice
翻译单元
翻译单元 (Translation Unit):翻译单元是 C++ 编译器处理的基本单位。它通常由一个源文件(.cpp 文件)及其直接或间接包含的所有头文件(.h 文件)组成。编译器会将翻译单元编译为一个目标文件(.o 或 .obj 文件)。
翻译单元的作用
编译的基本单位:编译器以翻译单元为单位进行编译,生成目标文件。
链接的基础:链接器将多个目标文件(来自不同的翻译单元)合并,生成最终的可执行文件或库。
符号可见性:翻译单元决定了符号(如函数、变量)的链接性(内部链接或外部链接)。
翻译单元与链接性
• 内部链接:符号仅在当前翻译单元中可见。
• 外部链接:符号在多个翻译单元中可见。
例如:
// File1.cppstatic int counter = 0; // 内部链接变量// File2.cppint counter = 0; // 外部链接变量
在 File1.cpp 中,counter 是内部链接的,只能在 File1.cpp 中使用。
在 File2.cpp 中,counter 是外部链接的,其他翻译单元可以通过 exte ...
C/C++
Dynamic Array and Static Array
在C和Java中,判断一个数组是动态数组还是静态数组的方式有所不同,因为两者的内存管理机制和语法规则不同。以下是具体的判断方法:
C语言
在C语言中,数组的存储方式决定了它是静态数组还是动态数组。
1. 静态数组
静态数组的大小在编译时确定,并且分配在栈(stack)或全局/静态存储区。
判断方法:
如果数组的大小是固定的(例如 int arr[10];),并且没有使用动态内存分配函数(如 malloc、calloc 等),那么它是静态数组。
如果数组是全局变量或静态局部变量(例如 static int arr[10];),它也是静态数组。
示例:
int arr[10]; // 静态数组,大小在编译时确定static int arr2[20]; // 静态数组,存储在静态存储区
2. 动态数组
动态数组的大小在运行时确定,并且分配在堆(heap)上。
判断方法:
如果数组是通过动态内存分配函数(如 malloc、calloc、realloc)创建的,那么它是动态数组。
动态数组的大小 ...
Go: Frameworks
GORM (Go Object-Relational Mapping)
Why:
减少手写 SQL:用 Go 方法代替 SQL,降低出错概率。
跨数据库兼容:同一套代码可适配 MySQL、SQLite 等。
自动迁移(AutoMigrate):自动同步 Go 结构体和数据库表结构。
What:
GORM 是 Go 语言中最流行的 ORM(对象关系映射)框架,全称 Go ORM。它的作用是将 Go 结构体(struct)和数据库表自动映射,让你能用 面向对象的方式操作数据库,而不用手写 SQL。
Drawbacks:
性能损耗:比直接写 SQL 慢(但大部分场景可接受)。
复杂查询受限:极端优化场景仍需手写 SQL。
学习成本:需要理解 GORM 的约定和特性。
Go: Syntax
Array and Slice
在 Go 语言中,Slice(切片) 和 Array(数组) 是两种不同的数据结构,虽然它们都用于存储相同类型的元素集合,但在使用方式、特性和底层机制上有显著区别。以下是它们的核心区别和适用场景:
1. 定义与声明
特性
Array(数组)
Slice(切片)
定义方式
固定长度,长度是类型的一部分
动态长度,基于数组的抽象(引用类型)
声明示例
var a [3]int
var s []int 或 s := make([]int, 3)
类型签名
[n]T(如 [3]int)
[]T(如 []int)
关键区别:
• 数组的长度在编译时确定,无法修改。
• 切片的长度可变,底层引用一个数组(或数组的片段)。
2. 内存分配与存储
特性
Array
Slice
内存分配
值类型,直接存储数据
引用类型,存储指向底层数组的指针、长度和容量
赋值行为
赋值或传参时会 复制整个数组
赋值或传参时 共享底层数组(浅拷贝)
底层结构
连续内存块
包含三个字段:ptr(指针)、len、cap ...
Go: 项目组织
Go Module 和 GOPATH有什么区别
Go Module 和 GOPATH 是 Go 语言管理依赖和项目的两种不同机制,主要区别如下:
1. GOPATH(传统模式)
特点
• 固定工作区:所有 Go 代码必须放在 $GOPATH/src 目录下。
• 无版本控制:依赖直接下载到 $GOPATH/src,无法管理多版本。
• 手动管理:需要手动执行 go get 下载依赖,无法精确锁定版本。
目录结构
$GOPATH/ ├── src/ # 所有项目代码必须放在这里 │ ├── github.com/ # 第三方依赖 │ └── your-project/ # 你的项目(路径需匹配导入路径) ├── pkg/ # 编译后的库文件 └── bin/ # 可执行文件
使用场景
• 旧版 Go 项目(Go 1.11 之前)。
• 部分遗留工具链仍依赖 GOPATH。
2. Go Module(现代模式) ...