预测文本毒性与机刷恶意评论的识别-端到端 ML 项目的部署与模型训练第二部分

预测文本毒性与机刷恶意评论的识别-端到端 ML 项目的部署与模型训练第二部分

img

恶意评论检测

第二部分的内容

  • 模板创建
  • 项目设置
  • 自定义日志

那么,让我们拿起键盘开始打字吧…

模板创建

NERD:为什么需要模板?

模板至关重要,因为它可以确保所有项目的一致性,并减少每次启动新项目时创建文件夹和文件所需的手动工作量。使用模板,您可以在所有端到端项目中保持适当的结构和一致性。

从现在开始,您只需要一个文件template.py作为所有项目的模板。

模板.py

导入操作系统
从pathlib导入路径
导入日志记录logging.basicConfig 

(level = logging.INFO,格式= '[%(asctime)s]:%(message)s:')

project_name = “Toxic_comment_detection”

 list_of_files = [ 
    “。github / workflows / .gitkeep”,
    f “ 
    src / { project_name} /__init__.py”,f“src / {project_name} /components/__init__.py”,f“src / {project_name } /utils/__init__.py”,f“src / { project_name } /utils/common.py”,f“src / {project_name} /config/__init__.py”,f“src / { project_name } /config/configuration.py”,f“src / { project_name} /pipeline/__init__.py”,f“src / {project_name} /entity/__init__.py”,f“src/{project_name } /entity/config_entity.py”,f“src/{project_name } /constants/__init__.py”,“config/config.yaml”,“params.yaml”,“schema.yaml”,“main.py”,“app.py”,“Dockerfile”,“requirements.txt”,“setup.py”,“research/trials.ipynb”,“templates/index.html”,] for filepath in list_of_files :filepath = Path (filepath ) filedir , filename = os.path.split(    filepath     )如果filedir != “ ” : os.makedirs         (filedir ,         exist_ok = True ) logging.info (f “创建目录;{filedir}对于文件:{filename} " ) if ( not os.path.exists(filepath)) or (os.path.getsize(filepath) == 0 ): with open (filepath, "w" ) as f: pass             logs.info( f" 创建空文件:{filepath} " ) else :         logs.信息( f“ {filename}已经存在”)
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    







    



    
         
            



    

template.py 详解(不需要可跳过)

从pathlib导入操作系统导入路径
导入日志记录日志记录

.basicConfig(level=logging.INFO,格式= '[%(asctime)s]: %(message)s:')
  1. 进口声明
  • os:该模块提供了一种使用依赖于操作系统的功能(如读取或写入文件系统)的方法。
  • Path来自pathlib:该模块提供表示文件系统路径的类,其语义适用于不同的操作系统。
  • logging:此模块用于设置日志系统,允许您报告状态、错误和信息消息。

2.日志配置

  • logging.basicConfig(...):这将设置日志配置,指定日志级别 ( INFO) 和日志消息格式。格式包括时间戳和消息。
project_name = “有毒评论检测”

3. 项目名称

  • project_name:该变量保存的是项目的名称,用于在各种文件路径中保持一致的项目结构。
list_of_files = [ 
    ".github/workflows/.gitkeep" , 
    f"src/ {项目名称} /__init__.py" , 
    f"src/ {项目名称} /components/__init__.py" , 
    f"src/ {项目名称} /utils/__init__.py" , 
    f"src/ {项目名称} /utils/common.py" , 
    f"src/ {项目名称} /config/__init__.py" , 
    f"src/ {项目名称} /config/configuration.py" , 
    f"src/ {项目名称} /pipeline/__init__.py" , 
    f"src/ {项目名称} /entity/__init__.py" , 
    f"src/ {项目名称} /entity/config_entity.py" , 
    f"src/ {项目名称} /constants/__init__.py" , 
    “config/config.yaml”、
    “params.yaml”、
    “schema.yaml”、
    “main.py”、
    “app.py”、
    “Dockerfile”、
    “requirements.txt”、
    “setup.py”、
    “research/trials.ipynb”、
    “templates/index.html”、
]

4.文件列表

  • list_of_files:此列表包含项目需要创建的所有文件和目录的相对路径。每个路径都指定为字符串,有的则使用变量project_name以保持项目结构的一致性。
对于 list_of_files 中的 filepath:
    filepath = Path (filepath) 
    filedir,filename = os.path.split (filepath)    如果 filedir != " " :         os.makedirs ( filedir,exist_ok=True) logging.info         ( f "为文件 {filename} 创建目录:{filedir}" )

5.文件和目录创建

  • 代码对filepath中的每一个进行迭代list_of_files
  • filepath = Path(filepath):将字符串路径转换为Path对象,以便于操作。
  • filedir, filename = os.path.split(filepath):将其拆分filepath为目录(filedir)和文件名(filename)。
  • if filedir != ""::检查是否filedir不是空字符串,这意味着该文件位于目录结构中。
  • os.makedirs(filedir, exist_ok=True):如果目录不存在,则创建目录(以及任何中间目录)。exist_ok=True如果目录已存在,则该参数可防止引发错误。
  • logging.info(f"Creating directory: {filedir} for the file: {filename}"):记录一条消息,表明目录正在创建。
如果 没有os.path.exists(filepath)或os.path.getsize(filepath) == 0 :
        使用 open (filepath, "w" )作为f:
            传递
        logstash.info( f"创建空文件:{filepath} " ) 
    else : 
        logstash.info( f" {filename}已存在" )

6.文件创建

  • if not os.path.exists(filepath) or os.path.getsize(filepath) == 0::检查文件是否不存在或其大小是否为零(即,为空)。
  • with open(filepath, "w") as f: pass:如果上述条件为真,则创建一个空文件。该pass语句用作占位符,因为我们只需要创建文件而不向其中写入任何内容。
  • logging.info(f"Creating empty file: {filepath}"):记录一条消息,表明正在创建一个空文件。
  • else: logging.info(f"{filename} already exists"):如果文件已经存在且不为空,则记录一条消息表明该文件已存在。

运行template.py之后

你的所有文件夹和文件都应该被创建

模板创建完成

项目设置

让我们通过填写 requrements.txt 的内容来设置项目

pandas 
numpy 
matplotlib 
scikit-learn 
imblearn 
seaborn 
tensorflow 
wordcloud 
types-PyYAML 
Flask 
Flask-Cors 
dagshub 
tqdm 
python-box==6.0.2 
mlflow==2.2.2 
pyYAML 
Ensure==1.0.2 
notebook 
-e .

NERD:这是什么?“-e”。

  • **e。:**此行允许以可编辑模式安装您的包,这意味着您对包所做的任何更改都将立即反映在环境中,而无需重新安装。

接下来我们来创建setup.py

设置.py

导入setuptools

并使用 open ( "README.md","r",encoding= "utf-8" )作为f:
    long_description = f.read() 


__version__ = "0.0.0"

 REPO_NAME = "Toxic-Comments-Detection"
 AUTHOR_USER_NAME = "Harshithvarma007"
 SRC_REPO = "END_TO_END_MODEL"
 AUTHOR_EMAIL = "harshith007varma007@gmail.com"


 setuptools.setup( 
    name=SRC_REPO,
    version=__version__,
    author=AUTHOR_USER_NAME,
    author_email=AUTHOR_EMAIL,
    description= "一个用于 ml 应用程序的小型 python 包",
    long_description=long_description,
    long_description_content= "text/markdown",
    url= f"https://github.com/ {AUTHOR_USER_NAME} / {REPO_NAME} ",
    project_urls={ 
        “Bug Tracker” : f“https://github.com/ {AUTHOR_USER_NAME} / {REPO_NAME} /issues”,
    },
    package_dir={ “” : “src” },
    packages=setuptools.find_packages(where= “src” ) 
)

setup.py详细解释(如果已经知道请跳过):

  1. Importing**setuptools**:该库用于方便Python项目的打包。

2. 阅读**README.md**

使用 打开(“README.md”,“r”,编码= “utf-8”)作为f:
    long_description = f.read()

README.md这将读取您的包裹的详细描述内容

3.定义包元数据

__version__ = “0.0.0” 

REPO_NAME = “有毒评论检测” 
AUTHOR_USER_NAME = “Harshithvarma007” 
SRC_REPO = “END_TO_END_MODEL” 
AUTHOR_EMAIL = “harshith007varma007@gmail.com”

4. 呼叫**setuptools.setup**

setuptools.setup(
    name = SRC_REPO,
    version = __version__,
    author = AUTHOR_USER_NAME,
    author_email = AUTHOR_EMAIL,
    description = “用于 ml 应用程序的小型 python 包”,
    long_description = long_description,
    long_description_content = “text / markdown”,
    url = f“https://github.com/ {AUTHOR_USER_NAME} / {REPO_NAME} ”,
    project_urls = { 
        “Bug Tracker”:f“https://github.com/ {AUTHOR_USER_NAME} / {REPO_NAME} /issues”,
    },
    package_dir = { “”:“src” },
    packages = setuptools.find_packages(where = “src”)
)
  • name:包的名称。
  • version:包的版本。
  • author:作者的用户名。
  • author_email:作者的电子邮件。
  • description:包的简短描述。
  • long_description:包的详细描述(内容来自README.md)。
  • long_description_content:详细描述的格式。
  • url:项目存储库的 URL。
  • project_urls:与项目相关的附加 URL(例如,bug 跟踪器)。
  • package_dir:包的根目录。
  • packages:自动查找指定目录中的所有包。

setup.py文件是打包 Python 项目的关键部分。它提供有关项目的元数据以及如何安装和分发项目的说明

现在运行

pip 安装-r 要求.txt

自定义日志创建

现在项目设置已完成,让我们继续创建自定义日志。

  1. 导航到文件夹
  • src\Toxic_comment_detection\__init__.py

2. 创建日志设置

导入操作系统
导入系统 导入日志
记录

logs_str = “[%(asctime)s: %(levelname)s: %(module)s: %(message)s]”

 log_dir = “logs” log_filepath
 = os.path.join (log_dir,“running_logs.log” ) os.makedirs (log_dir,exist_ok=True) logs.basicConfig(     level=logging.INFO,format = logs_str,    handlers=[         logging.FileHandler(log_filepath),        logging.StreamHandler(sys.stdout ) ]     ) logger = logs.getLogger( “Toxic_logger” )





    

用法

现在您可以将所有详细信息记录到其中running_logs.log,这对于调试或记录整个项目流程很有用。

设置实用程序

现在自定义日志记录已经完成,让我们继续创建设置实用程序。

  1. 导航到文件夹
  • src\Toxic_comment_detection\utils\common.py

2.创建实用程序设置

从box.exceptions导入 os导入 BoxValueError
导入 yaml
从Toxic_comment_detection 导入 logger
导入 json
导入 joblib
从Ensure 导入 Ensure_annotations
从box 导入 ConfigBox
从pathlib 导入 Path
从typing 导入Any 



@ensure _annotations 
def read_yaml(path_to_yaml: Path) - > ConfigBox: 
    """读取 yaml 文件并返回

    Args: 
        path_to_yaml (str): 类似输入的路径

    引发:
        ValueError: 如果 yaml 文件为空
        e: 空文件

    返回:
        ConfigBox: ConfigBox 类型
    """
    尝试:
        使用 open (path_to_yaml)作为yaml_file: 
            content = yaml.safe_load(yaml_file) 
            logger.info(f"yaml 文件:{path_to_yaml} 已成功加载")
            返回ConfigBox(content)
    除外BoxValueError:
        引发 ValueError("yaml 文件为空")
    除外Exception as e:
        引发 e 


@ensure _annotations 
def create_directories(path_to_directories: list, verbose = True ): 
    """创建目录列表

    Args: 
        path_to_directories (list): 目录路径列表
        ignore_log (bool, 可选): 是否要创建多个目录,忽略。默认为 False。
    """ 
    for path in path_to_directories: 
        os.makedirs(path, exist_ok = True ) 
        if verbose: 
            logger.info(f"创建目录于:{path}") 


@ensure _annotations 
def save_json(path: Path, data: dict): 
    """保存 json 数据

    Args: 
        path (Path): json 文件的路径
        data (dict): 要保存在 json 文件中的数据
    """ 
    with  open (path, "w") as f: 
        json.dump(data, f, indent = 4 ) 

    logger.info(f"json 文件保存于:{path}") 




@ensure _annotations 
def load_json(path: Path) - > ConfigBox: 
    """加载 json 文件数据

    Args: 
        path (Path):json 文件的路径

    返回:
        ConfigBox:数据作为类属性而不是字典
    “”
    以 打开(路径)为f:
        content = json.load(f)

    logger.info(f“json文件成功加载自:{path}”)
    返回ConfigBox(content)


@ensure _annotations 
def save_bin(data:Any,path:Path):
    “”“保存二进制文件

    Args:
        数据(Any):要保存为二进制
        路径的数据(Path):二进制文件的路径
    “”“ 
    joblib.dump(value = data,filename = path)
    logger.info(f“二进制文件保存在:{path}”)


@ensure _annotations 
def load_bin(path:Path)- >  Any:
    “”“加载二进制数据

    Args:
        路径(Path):二进制文件的路径

    返回:
        Any:存储在文件中的对象
    “”“ 
    data = joblib.load(path)
    logger.info(f“二进制文件加载自:{path}”)
    返回数据



@ensure _annotations 
def get_size(path:Path)- > str: 
    """获取以 KB 为单位的大小

    参数:
        path (Path):文件路径

    返回:
        str:以 KB 为单位的大小
    """ 
    size_in_kb = round(os.path.getsize(path) / 1024 ) 
    return f"~ {size_in_kb} KB"

功能

  • **read_yaml**:读取 YAML 文件并返回其包装在ConfigBox对象中的内容。
  • **create_directories**:创建路径列表中指定的目录,并带有记录创建过程的选项。
  • **save_json**:将 Python 数据结构以 JSON 形式保存到指定的文件路径。
  • **load_json**:将指定文件路径的JSON数据加载到对象中ConfigBox
  • **save_bin**:使用 将二进制数据保存到指定的文件路径joblib
  • **load_bin**:使用 从指定文件路径加载二进制数据joblib
  • **get_size**:计算并返回文件的大小(以千字节(KB)为单位)。

这些实用函数提供了通用功能,可用于各种端到端机器学习项目。它们处理文件处理(JSON、二进制)、目录创建、YAML 文件读取和文件大小检索等操作,确保高效、有序的项目管理。

向前进

呼……该项目最具挑战性和关键性的部分现已完成。让我们深入探讨下一部分的激动人心的阶段,它将涵盖机器学习的几个关键方面:

  • 数据采集
  • 数据验证
  • 数据转换
  • 模型训练
    create_directories`:创建路径列表中指定的目录,并带有记录创建过程的选项。
  • **save_json**:将 Python 数据结构以 JSON 形式保存到指定的文件路径。
  • **load_json**:将指定文件路径的JSON数据加载到对象中ConfigBox
  • **save_bin**:使用 将二进制数据保存到指定的文件路径joblib
  • **load_bin**:使用 从指定文件路径加载二进制数据joblib
  • **get_size**:计算并返回文件的大小(以千字节(KB)为单位)。

这些实用函数提供了通用功能,可用于各种端到端机器学习项目。它们处理文件处理(JSON、二进制)、目录创建、YAML 文件读取和文件大小检索等操作,确保高效、有序的项目管理。

向前进

呼……该项目最具挑战性和关键性的部分现已完成。让我们深入探讨下一部分的激动人心的阶段,它将涵盖机器学习的几个关键方面:

  • 数据采集
  • 数据验证
  • 数据转换
  • 模型训练
  • 模型评估

博客原文:专业人工智能社区

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值