IBM model 1

RT,蛋疼的MT实验~

伪代码请参见《统计机器翻译》中文版61页。

ps:输入只是参考了书上的例子——三个对齐句对~保证和书上输出的概率相同

该代码还没有经过大规模平行语料的检验。。后续有待优化~


输入:data.e

the house
the book
a book

data.f

das Haus
das Buch
ein Buch

python代码ibmModel1.py:

#coding=utf-8
import os

#Read File to pairs
fp_en = open('data.e','r')
fp_cn = open('data.f','r')
iters = 1
pairDic = {}

#生成原始序对字典
countPair = 0
for line_cn,line_en in zip(fp_cn,fp_en):
    f = line_cn.split()
    e = line_en.split()
    for word1 in f:
        for word2 in e:
            pairDic[countPair] = (word1,word2)
            countPair += 1
    iters += 1
fp_en.close()
fp_cn.close()


#先将序对字典一次性去重
lst = list(set(pairDic.values()
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Intrinsic Biophysical Mechanism (IBM) 模型是一个描述神经元膜电位变化的基于生理学的数学模型。下面是一个使用Python实现IBM模型的示例代码: ```python import numpy as np import matplotlib.pyplot as plt # 定义IBM模型 def ibm_model(I, V_rest=-70, C=1, g_L=0.1, E_L=-70, V_th=-55, V_peak=20, delta_t=0.1, t_end=100): """ I: 输入电流 V_rest: 静息电位,默认为-70 mV C: 膜电容,默认为1 μF/cm^2 g_L: 漏电导,默认为0.1 mS/cm^2 E_L: 漏电位,默认为-70 mV V_th: 阈值电位,默认为-55 mV V_peak: 峰值电位,默认为20 mV delta_t: 时间步长,默认为0.1 ms t_end: 模拟时长,默认为100 ms """ # 初始化模拟参数和变量 num_steps = int(t_end / delta_t) t = np.linspace(0, t_end, num_steps) V = np.zeros(num_steps) V[0] = V_rest m = np.zeros(num_steps) m[0] = 0.05 h = np.zeros(num_steps) h[0] = 0.6 n = np.zeros(num_steps) n[0] = 0.32 # 计算模拟结果 for i in range(1, num_steps): # 计算电流 I_L = g_L * (V[i - 1] - E_L) I_Na = 120 * m[i - 1] ** 3 * h[i - 1] * (V[i - 1] - 115) I_K = 36 * n[i - 1] ** 4 * (V[i - 1] + 12) I_ext = I[i - 1] I_total = I_L + I_Na + I_K + I_ext # 计算膜电位 V[i] = V[i - 1] + delta_t / C * I_total # 更新通道状态变量 alpha_m = 0.1 * (V[i - 1] + 40) / (1 - np.exp(-0.1 * (V[i - 1] + 40))) beta_m = 4 * np.exp(-0.0556 * (V[i - 1] + 65)) alpha_h = 0.07 * np.exp(-0.05 * (V[i - 1] + 65)) beta_h = 1 / (1 + np.exp(-0.1 * (V[i - 1] + 35))) alpha_n = 0.01 * (V[i - 1] + 55) / (1 - np.exp(-0.1 * (V[i - 1] + 55))) beta_n = 0.125 * np.exp(-0.0125 * (V[i - 1] + 65)) m[i] = m[i - 1] + delta_t * (alpha_m * (1 - m[i - 1]) - beta_m * m[i - 1]) h[i] = h[i - 1] + delta_t * (alpha_h * (1 - h[i - 1]) - beta_h * h[i - 1]) n[i] = n[i - 1] + delta_t * (alpha_n * (1 - n[i - 1]) - beta_n * n[i - 1]) # 判断是否发生动作电位 if V[i] >= V_th: V[i] = V_peak m[i] = 0 h[i] = 1 n[i] = 0.5 return t, V # 定义输入电流 I = np.zeros(1000) I[100:900] = 10 # 运行IBM模型 t, V = ibm_model(I) # 绘制模拟结果 plt.plot(t, V) plt.xlabel('Time (ms)') plt.ylabel('Membrane Potential (mV)') plt.show() ``` 在以上代码中,我们定义了一个名为`ibm_model`的函数,该函数接受一组输入电流`I`和一些模型参数,并返回模拟结果`t`和膜电位变化`V`。在主程序中,我们定义了一个输入电流`I`,并使用`ibm_model`函数模拟神经元膜电位的变化,最后使用Matplotlib库绘制了模拟结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值